SORU
12 AĞUSTOS 2010, PERŞEMBE


C#'In mal mülk boş olup olmadığını kontrol etmek için şık bir yol

C# Bu örnekte PropertyC kapalı ve ObjectA, PropertyA ve PropertyB null bir değeri çekmek istiyorsunuz.

ObjectA.PropertyA.PropertyB.PropertyC

Nasıl güvenli kod az miktarda PropertyC alabilir miyim?

Şimdi kontrol ediyorum doğru:

if(ObjectA != null && ObjectA.PropertyA !=null && ObjectA.PropertyA.PropertyB != null)
{
// safely pull off the value
int value = objectA.PropertyA.PropertyB.PropertyC;
}

Bu (pseudo-code) gibi bir şey daha hoş olurdu.

int value = ObjectA.PropertyA.PropertyB ? ObjectA.PropertyA.PropertyB : defaultVal;

Hatta daha da boş birleşiyor operatörü ile çöktü.

EDİTAslında benim ikinci örnek js gibi olduğunu söyledim ama js işe yaramaz doğru işaret olduğunu beri psuedo-kodu değiştirdim.

Çok teşekkürler, Jon

CEVAP
2 NİSAN 2014, ÇARŞAMBA


Kısa Uzatma Yöntemi:

public static TResult IfNotNull<TInput, TResult>(this TInput o, Func<TInput, TResult> evaluator)
  where TResult : class where TInput : class
{
  if (o == null) return null;
  return evaluator(o);
}

Kullanarak

PropertyC value = ObjectA.IfNotNull(x => x.PropertyA).IfNotNull(x => x.PropertyB).IfNotNull(x => x.PropertyC);

Bu basit bir uzantısı yöntemi ve çok daha fazlası http://devtalk.net/csharp/chained-null-checks-and-the-maybe-monad/ bulabilirsin

DÜZENLEME:

Şu an için kullandıktan sonra bu yöntem için uygun bir isim olması gerektiğini düşünüyorum() İfNotNullorijinal yerine () İle.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:
C#

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Derek Banas

    Derek Banas

    12 AĞUSTOS 2008
  • ETrade Supply

    ETrade Suppl

    23 Temmuz 2011
  • friendz.net

    friendz.net

    29 EKİM 2010