Wenn die folgende Methode:Typ Prüfung auf Nullable <int>
static void DoSomethingWithTwoNullables(Nullable<int> a, Nullable<int> b)
{
Console.WriteLine("Param a is Nullable<int>: " + (a is Nullable<int>));
Console.WriteLine("Param a is int : " + (a is int));
Console.WriteLine("Param b is Nullable<int>: " + (b is Nullable<int>));
Console.WriteLine("Param b is int : " + (b is int));
}
Wenn ich nenne diese Methode mit null als Parameter, die Typprüfung für diesen Parameter false zurückgibt. Zum Beispiel dieses Code
DoSomethingWithTwoNullables(5, new Nullable<int>());
Ergebnisse in dieser Ausgabe:
Param a is Nullable<int>: True
Param a is int : True
Param b is Nullable<int>: False
Param b is int : False
Gibt es eine Möglichkeit die Typinformationen zu erhalten, wenn eine Nullable und vorbei null verwenden? Ich weiß, dass die Überprüfung des Typs in diesem Beispiel nutzlos ist, aber es veranschaulicht das Problem. In meinem Projekt übergebe ich die Parameter an eine andere Methode, die ein params object[]
Array verwendet und versucht, den Typ der Objekte zu identifizieren. Diese Methode muss verschiedene Dinge für Nullable<int>
und Nullable<long>
tun.
Weil b zuerst mit "int" eingerahmt wird, ergibt dies eine Nullreferenz. – usr
Vermutlich könnten Sie {} catch {} versuchen, es zu testen, also gibt es eine Möglichkeit, das herauszufinden. Ich wette mit Reflektion, dass du einen Schritt weiter gehen und es polieren könntest. Vielleicht initialisiere ich eine neue Instanz, die ihr einen Standardwert geben soll, und mache 'typeof (variable.value)'? – NibblyPig
@SLC: Sie können nicht. Es ist nur eine Nullreferenz ohne Typinformation. – usr