2016-09-12 4 views
0

Wie kann ich effizienter auf Null-Werte überprüfen und ihre Reihenfolge entsprechend festlegen?Set-Werte Reihenfolge basierend auf anderen Werten Logik

Ich habe 3 Felder (1, 2, 3) und ich muss eine Überprüfung durchführen, um zu sehen, ob einer der String-Werte null ist und wenn ja, muss ich den entsprechenden Wert bis zum nächsten Punkt verschieben, wenn 2 ist null, aber 3 ist nicht ich muss 3 in 2-Punkt verschieben.

Mein ursprünglicher Gedanke war, dies mit einer Reihe von if-Aussagen zu tun, aber nachdem ich diese Straße begonnen habe, lerne ich, dass meine Liste von if-Aussagen substanziell sein wird, also suche ich nach einer besseren Möglichkeit, dies zu erreichen überprüfe und setze meine Werte.

if (string.IsNullOrEmpty(field1)) 
       { 
        fields.SetField("Field1", field1); 
        fields.SetField("Field2", field2); 
       } 

Wenn ich die obige Route nach unten fortgesetzt würde ich auch einen Scheck für das Feld 2 und 3 und etc ... Vorform für jede erste Kontrolle.

Antwort

1

Vielleicht könnten Sie diese Logik verwenden:

string firstNotNull = field1 ?? field2 ?? field3; 
if (string.IsNullOrEmpty(field1)) fields.SetField("Field1", firstNotNull); 
if (string.IsNullOrEmpty(field2)) fields.SetField("Field2", firstNotNull); 
if (string.IsNullOrEmpty(field3)) fields.SetField("Field3", firstNotNull); 

Aber die Logik ist nicht ganz klar. Möchten Sie auch Field3 mit einem Wert von Field1 überschreiben, wenn Field3 null ist und Field1 nicht?

Vielleicht generische Ansatz ist das, was Sie suchen:

var stringColumns = table.Columns.Cast<DataColumn>().Where(c => c.DataType == typeof(string)).ToList(); 
foreach (DataRow row in table.Rows) 
{ 
    for (int i = 0; i < stringColumns.Count; i++) 
    { 
     string field = row.Field<string>(i); 
     if (string.IsNullOrEmpty(field)) 
     { 
      // check all after this: 
      for (int ii = i + 1; ii < stringColumns.Count; ii++) 
      { 
       string nextField = row.Field<string>(ii); 
       if (!string.IsNullOrEmpty(nextField)) 
       { 
        row.SetField(i, nextField); 
        break; 
       } 
      } 
     } 
    } 
} 
+0

Feld1 sollte immer einen Wert haben, jedoch dürfen Feld2 und Feld3 nicht in diesem Fall so hoch wie möglich verschoben werden. – 0perator

+0

Was bedeutet "sie müssen so hoch wie möglich bewegt werden"? –

+0

Sorry, ich hätte sagen sollen, dass sie zum "top" oder zu Field1 oder Field2 gehen müssen. – 0perator

0

Wenn ‚Felder‘ ein IEnumerable Sammlung von Strings ist, könnte man einfach die orderby()/OrderByDescending() -Methode für das nennen.

Verwandte Themen