2016-05-19 4 views
3

Ich habe eine Methode, die Nullable-Parameter akzeptieren kann, weil sie aus einer Tabelle mit Nullable-Spalten gefüllt wird.Wie fo einen nullbaren Parameter in einer Methode füttern?

Beim Aufruf dieser Methode brauche ich eine Möglichkeit, um eine Nullable-Variable zu füttern, und da ist mein Problem. Ich versuchte dies:

foreach (DataRow row in DataTable1.Rows) 
{ 
    test((int)row["ID"], (int?)row["value"]); 
} 

aber es gibt mir einen Gussfehler

"angegebene Umwandlung ist ungültig"

So habe ich versucht, dies:

foreach (DataRow row in DataTable1.Rows) 
{ 
    test((int)row["ID"], (int)row["value"] ?? DBnull.Value); 
} 

und dies:

foreach (DataRow row in DataTable1.Rows) 
{ 
    test((int)row["ID"], (int)row["value"] ?? null); 
} 

aber sie beide geben mir Fehler

„Operator ?? dies kann nicht auf Operanden vom Typ int und null

Last one angewendet werden soll, habe ich versucht:

foreach (DataRow row in DataTable1.Rows) 
{ 
    test((int)row["ID"], (int?)row["value"] ?? null); 
} 

dieses kompiliert, sondern gibt Laufzeitfehler

"angegebene Umwandlung ist ungültig"

Also wie kann ich das tun? Die Idee ist, dass der Parameterwert entweder mit einem Wert aus der Tabelle oder mit Null gefüllt ist.

Antwort

7

Sie können das DataRow Erweiterungsmethode Field die Nullable-Typen unterstützt:

foreach (DataRow row in DataTable1.Rows) 
{ 
    int id = row.Field<int>("ID"); 
    int? value = row.Field<int?>("value"); 
    test(id, value); 
} 
3

Versuchen Sie es mit as (sichere Besetzung, die null zurückgibt, wenn es fehlschlägt):

test((int)row["ID"], row["value"] as int?); 
0
foreach (DataRow row in DataTable1.Rows) 
{ 
    var id = row["ID"] as int? ??default(int); 
    int? value = row["value"] as int? ??default(int?); 

    test(id, value); 
} 
Verwandte Themen