Ich würde dann aber (falls du es noch nicht gemacht hast) auch die
Anzahl der Zeilen begrenzen und nicht stillschweigend Einträge
ignorieren. Man könnte auch prüfen, ob im IP-Feld ein Wert vorhanden
ist, bevor man ToString aufruft, da das Programm sonst u.U. mit einer
NullReferenceException abstürzt. Der Use-Wert kann eigentlich nur true
oder false sein, also ist der else-Zweig sinnlos.
Wenn du die Anzahl der Spalten nicht begrenzt, könntest du List.Add
nehmen (sonst wäre auch ein einfaches Array möglich). Warum du statt
bool int verwendest, kann man nicht ohne weiteren Code erkennen ...
1 | foreach (DataGridViewRow row in dataGridView.Rows)
|
2 | {
|
3 | var ipDestination = row.Cells["IPDestination"].Value;
|
4 | if (ipDestination != null)
|
5 | {
|
6 | bool use = Convert.ToBoolean(row.Cells["Use"].Value);
|
7 | TableIpAddr.Add(Tuple.Create(ipDestination.ToString(), use ? 1 : 0));
|
8 | }
|
9 | }
|
Oder per LINQ (in diesem Fall aber nicht besser, denke ich):
1 | TableIpAddr = (from row in dataGridView.Rows.Cast<DataGridViewRow>()
|
2 | let stringIpAddr = row.Cells["IPDestination"].Value
|
3 | where stringIpAddr != null
|
4 | let use = Convert.ToBoolean(row.Cells["Use"].Value) ? 1 : 0
|
5 | select Tuple.Create(stringIpAddr.ToString(), use))
|
6 | .ToList();
|
Evtl. wäre es dann auch sinnvoll, die eigentliche "Arbeitstabelle" von
dieser Methode bzw. der Liste TableIpAddr zu trennen und bei der
Übernahme der Daten an anderer Stelle dann zu reagieren, falls die
Anzahl der Einträge sich geändert hat (anstatt irgendwo in einer Form,
also im User-Interface-Code, das Ganze als "if (row.Index <
TableIpAddr.Count)" zu verstecken).