C genel bağımsız değişken Null veya varsayılan karşılaştırma#
Genel bir yöntem bu şekilde tanımlıyorum:
public void MyMethod<T>(T myArgument)
Yapmak istediğim ilk şey, eğer myArgument değeri türü için varsayılan değer olup olmadığını kontrol etmek, böyle bir şey:
if (myArgument == default(T))
Ama bu T == operatörü uygulayacak garantili almadım çünkü derleme değildir. Bu kodu değiştirdim:
if (myArgument.Equals(default(T)))
Şimdi bu derler, ama eğer myArgument için test ediyorum bir parçası olan null, başarısız olur. Bu gibi açık boş bir onay ekleyebilirsiniz:
if (myArgument == null || myArgument.Equals(default(T)))
Şimdi bu bana gereksizmiş gibi geldi. ReSharper bile myArgument değiştireyim = = = = varsayılan(T) başladığım yere içine myArgument kısmı boş iddia etmiyoruz. Daha iyi bir şekilde bu sorunu çözmek için vardır?
EDİT: desteğe ihtiyacım varher ikisi debaşvurular türleri ve değer türleri.
CEVAP
Boks önlemek için, eşitlik için jenerik karşılaştırmak için en iyi yolu EqualityComparer<T>.Default
ile. Bu* *10 (boks olmadan) yanı sıra object.Equals
, saygı ve tüm Nullable<T>
"" nüanslar. kaldırdı kolları Bu nedenle:
if(EqualityComparer<T>.Default.Equals(obj, default(T))) {
return obj;
}
Bu maç olacak:
- sınıflar boş
- (boş)
Nullable<T>
null - diğer yapılar için/etc/yanlış sıfır
Nasıl değişken olup olmadığını belirle...
Nasıl Clojure içinde işlev bağımsız de...
En iyi durum geçersiz genel tür bağıms...
C değişken null veya boş bir oturum be...
Neden Çınlama ve VS2013 ayracı-başlatı...