Nicht wirklich ein VB Kerl zu sein, ich habe einige Fehler gemacht in meiner ursprünglichen Antwort, die Konrad mich gerade am Set. Die ursprüngliche Antwort ist unten, aber ich wollte meine Antwort aktualisieren, basierend auf Konrads Eingabe korrekt.
Wie Konrad sagt, default(T)
und Nothing
ist für beiden Werte und Referenztypen in der Tat äquivalent. Der richtige Code VB sollte wie folgt in dem Fall , dass Sie genau das gleiche Verhalten bekommen würden Sie in meinem C # -Code erhalten:
Function ReturnSomething(Of T)() As T
Return Nothing
End Function
Function DoSomething(Of T)()
Dim x as T = Nothing;
If x = Nothing Then
Console.WriteLine("x is default.")
Else
Console.WriteLine("x has a value.")
End If
Original (FALSCH) Antwort
Es sieht aus , als ob es kein VB entspricht ist default(T)
. Doch nach diesem Beitrag , anders als in C #, wenn T
ein Werttyp ist, in VB können Sie immer noch verwenden , Nothing
die in den meisten Fällen semantisch gleich ist.
Der große Platz , in dem Sie ein Problem haben würden mit Nothing
dem Sie normalerweise verwenden würden default(T)
, wenn Sie es in Ihrem Code testen müssen. Betrachten Sie den folgenden C # -Code:
T ReturnSomething<T>()
{
return default(T);
}
void DoSomething<T>()
{
T x = default(T);
if(x == default(T))
Console.WriteLine("x is default.");
else
Console.WriteLine("x has a value.");
}
Übersetzt wie folgt VB:
Function ReturnSomething(Of T)() As T
Return Nothing
End Function
Function DoSomething(Of T)()
Dim x as T = Nothing;
If x Is Nothing Then
Console.WriteLine("x is default.")
Else
Console.WriteLine("x has a value.")
End If
End Function
Wenn T
ein Referenztyp ist, wirken beide Versionen genau das gleiche für beide ReturnSomething
und DoSomething
. Wenn jedoch T
ein Werttyp ist, ReturnSomething
wirkt genau das gleiche für beide Sprache, sondern DoSomething
druckt „x Standard ist.“ in der C # Version, aber "x hat einen Wert." in der VB - Version.