typ zawierający listy

0

Witam, od niedawna zacząłem programować i spotkałem się z takim problemem który nie mogę rozwiązać.
Mam taki typ:

public class Tomato
{

    public List<string> ShortName = new List<string>();
    public List<string> FullName = new List<string>();
    
}

Zapisuje sobie do każdej listy jakieś wartości:

foreach (DataRow item in dtt.Rows)
{

         hghg.ShortName.Add(Convert.ToString(item[0]));
         hghg.FullName.Add(Convert.ToString(item[1]));
         
        }

Problem polega na tym że chciałbym teraz przejechać pętlą po każdej z list używając typu Tomato
Gdy jadę po po liście osobno (jak poniżej) dane dostaję niestety potrzebuję przejechać po wszystkich listach na raz.

foreach (string newitem in hghg.ShortName )
{

              writer.WriteLine(String.Format(@"{0};", newitem));
            
            }

A tak wygląda nieudana proba dostania się przez typ:

Tomato hghg = new Tomato();
List<Tomato> probbb = new List<Tomato>();

foreach (DataRow item in dtt.Rows)
{

         hghg.ShortName.Add(Convert.ToString(item[0]));
         hghg.FullName.Add(Convert.ToString(item[1]));
         
        }

probbb.Add(hghg);

foreach (Tomato newitem in probbb)
{

             writer.WriteLine(String.Format(@"{0};{1};", newitem.ShortName, newitem.FullName));
             
            }

Może ktoś pomóc nie mam zielonego pojęcia jak to zrobić?

0

Ale co ty chcesz zrobić w ogóle?
Dodawaj kod w tagach <code class="csharp"> </code> i może jakieś więcej mówiące nazwy niż hghg i tomato.

0

Podaje cały kod chodzi o zapisanie do csv

public void pobierz_dane_csv(string q)
{
DataTable dtt = new DataTable();
Tomato hghg = new Tomato(); //1.tworzymy nowa zmienną o typie Tomato
List<Tomato> probbb = new List<Tomato>(); //3.tworzymy nowa liste typu Tomato

        SqlDataReader czytacz;
        SqlCommand zapyta;

        zapyta = new SqlCommand(q);
        zapyta.Connection = this.polaczenie;
       
        czytacz = zapyta.ExecuteReader();
        tomtom ble = new tomtom();
        dtt.Load(czytacz);
        int iloscr = dtt.Rows.Count;

        

        StreamWriter writer = new StreamWriter(@"C:\new\ropo.csv", false);

        if (writer != null)
        {
            writer.WriteLine(@"ShortName;FullName;");//Pierwszy wiersz to dodanie nazw kolumn
        
        foreach (DataRow item in dtt.Rows)
        {
     hghg.ShortName.Add(Convert.ToString(item[0]));
         hghg.FullName.Add(Convert.ToString(item[1]));
         
        }
        probbb.Add(hghg);



        foreach (Tomato newitem in probbb)
        {

            writer.WriteLine(String.Format(@"{0};{1};", newitem.ShortName, newitem.FullName));

        }


                                           
            writer.Close();
        }

I do tego klasa Tomato która zawiera listę

public class Tomato
{

    public List<string> ShortName = new List<string>();
    public List<string> FullName = new List<string>();
    
}
3

Podchodzisz do tego chyba od złej strony.

struct Tomato
{
        public string ShortName;
        public string FullName;
}
...
List<Tomato> tomato;
0

Ok zrobiłem tak jak mówisz i działa eksportuje do csv ale rozwiązanie mi się nie podoba .
Zrobiłem to tak:

public class Tomato
{
    public string ShortName {get; set;}
    public string FullName {get; set;}   
}

A następnie w pętli przejechałem po wszystkich wierszach zapisałem do zmiennych i od razu do pliku.

foreach (DataRow item in dtt.Rows)
{

     hghg.ShortName = item[0].ToString();
         hghg.FullName = item[1].ToString();
         
        
         writer.WriteLine(String.Format(@"{0};{1};", hghg.ShortName, hghg.FullName));
        }

Niestety jest to mało efektywne gdybym miał dane w listach to mógłbym je na różne sposoby przetwarzać.
Może jakieś inne rozwiązanie aby mieć w Typie listy a następnie w pętli przejechać po kilku listach na raz i zapisać do pliku.

0
    class Program
    {
        static void Main(string[] args)
        {
            new Program();

            Console.Read();
        }
        public Program()
        {

            List<Tomato> tomatoList = new List<Tomato>();
            tomatoList.Add(new Tomato(){ FullName = {"sdfsdf","sdfsd"}, ShortName = {"sdf","Sdfsd"} });
            tomatoList.Add(new Tomato() { FullName = { "sdfsddsff", "sdffsd" }, ShortName = { "sadf", "Sdfdfdsd" } });
            int i = 0;
            foreach(var tomato in tomatoList)
            {
                Console.WriteLine("Tomato nr "+(++i));
                foreach(var sName in tomato.ShortName)
                {
                    Console.WriteLine("ShortName: " + sName);
                }
                foreach (var fName in tomato.FullName)
                {
                    Console.WriteLine("FullName: " + fName);
                }
            }
        }

        public class Tomato
        {
            public List<string> ShortName = new List<string>();
            public List<string> FullName = new List<string>();

        }

    }

Ale nie wiem czy to o to Ci chodzi.

0

No właśnie nie do końca, bo tak już robiłem

Załużmy że mamy listę - 1,2,3,4 a druga listę - a,b,c,d

Jedna i druga znajdują się w klasie Tomato:

public class Tomato
{
public List<string> ShortName = new List<string>();
public List<string> FullName = new List<string>();

    }

Teraz chcemy tak się dostać do tego Typu i listy aby po użyciu:

writer.WriteLine(String.Format(@"{0};{1};", hghg.ShortName, hghg.FullName))

dostać:

1a
2b
3c
4d

a nie tak jak dostajemy

1
2
3
4
a
b
c
d

2

Wygogluj Dictionary albo KeyValuePair

Ewentualnie

foreach(var tomato in tomatoList)
            {
                for(int i = 0; i<tomato.FullName.Count;i++)
                {
                    //if (tomato.ShortName[i] != null) źle
                      if (i<tomato.ShortName.Count)
                        Console.WriteLine(tomato.FullName[i] + tomato.ShortName[i]);
                }
            }
0

Super działa, dzięki

1 użytkowników online, w tym zalogowanych: 0, gości: 1