4 Stimmen

Wie sollten Sie testen, ob eine Variable in C# ein Werttyp ist?

Ich habe ein paar Stellen, an denen ich einen generischen Typparameter habe, der nicht auf eine Klasse (oder Struktur) beschränkt ist, und wenn ich versuche, Variablen dieses Typs mit null unterstreicht Resharper dies und beschwert sich, dass ich möglicherweise einen Werttyp mit null (ein berechtigter Einwand, gewiss). Gibt es eine akzeptierte Methode, um zu prüfen, ob eine Variable ein Werttyp ist, bevor sie mit null verglichen wird?

Zum Beispiel:

public TObject MyProperty { get; set; }

...
private void SomeMethod()
{
    if(MyProperty == null) //Warning here
    {
       ...
    }
}

Ich habe mich mit if(!(MyProperty is ValueType) && MyProperty) --Ist das gültig? Die Warnung bleibt bestehen, aber das hat nicht unbedingt etwas zu bedeuten.

7voto

CodingWithSpike Punkte 41513

Was wollen Sie tun, wenn es sich um einen Werttyp handelt? manchmal werde ich das tun:

public void DoStuff<T> (T variable)
{
    if(variable == default(T))
        ...  // true if null or 0 in the case of a value type
}

Oder:

if( typeof(T).IsValueType )

参照 aquí .

2voto

BrokenGlass Punkte 153950

Sie können Reflexion verwenden, aber das ist langsam und sollte vermieden werden:

bool isValueType = typeof(TObject).IsValueType;

Muss Ihre generische Methode wirklich sowohl Referenz- als auch Werttypen als Typparameter übergeben?

1voto

Nahydrin Punkte 12829

Sie können einfach den Typ vergleichen:

if (MyProperty.GetType() == typeof(...))
{

}

Sie erhalten eine Warnung, weil MyProperty nicht zugewiesen ist.

0voto

JGWeissman Punkte 708
public static bool IsNull<T>(T t)
{
    return ((Object)t == null);
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X