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
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.

Nasıl Server tablo sütun olup olmadığı...
Nasıl bir hizmet Android üzerinde çalı...
Bir şekilde eğer bir dosyanın kullanım...
Eğer bir dize geçerli bir adres olup o...
Nasıl PHP ilişkisel Dizi veya sıralı o...