2013-07-26 18 views
7

Bir API tarafından döndürülen birkaç düz eski C# nesnesine sahibim ve içlerinde iç içe birkaç POCO katmanları var. Bu yapıların derinliklerinde bulunan alanlara erişmem gerekiyor, ancak veri eksik olduğunda API bu iç içe geçmiş nesneleri null olarak bıraktığı için, kendimi gerçekten istediğim alana götürmek için bir sürü boş kontrol yapmak zorundayım.Yuvalanmış nesnelerde boş çekler

if(obj != null && obj.Inner != null && obj.Inner.Innerer != null) { ... } 

Buraya geldiğim en kısa biçim, üçlü operatörü kullanmaktır.

obj != null && obj.Inner != null && obj.Inner.Innerer != null ? obj.Inner.Innerer.Field : null; 

C#, tüm bu karşılaştırmaları yazmak zorunda kalmadan bunu yapmak için herhangi bir yolu var mı? Gerçekten çok kısa ve basit bir şey isterim:

obj.Inner.Innerer.Field ?? null; 

Ancak bu yalnızca null için Field öğesini kontrol eder.

+0

Bu konu hakkında (http://stackoverflow.com/questions/17657942/nice-way-to-avoid-null-checks-in-ifs/17663536#17663536)? – rene

+0

Hmm, 'f' yöntemi kesinlikle çok dağınık. Kod satırını daha kısa hale getirir, ancak üçlü anlamanın daha kolay olduğunu söyleyebilirim. Tc' yöntemi oldukça yakındır, ancak bir performans cezası olan yöntemde bir istisna atar (özellikle boş bir onay ile karşılaştırılır). Çok yakın, ama tam olarak umduğum şeyi değil. – Syon

+0

Bir fikir, boş bir istisna yakalamaya çalışırken Inner.Innerer.Field'a doğrudan erişmeyi deneyebilirsiniz. Yoldaki herhangi bir şey boşsa, istisna tutulur ve siz null döndürürsünüz. Aksi takdirde değeri döndürürsünüz. – KappaG3

cevap

0

Bu güzel değil ama sen sadece yapmak zorunda null çekleri kapsülleyen Kodunuzdaki erişimci işlevlerini yazabilirsiniz tek bir yerde. E.g. Böyle diyebiliriz

Innerer GetInnerer() 
{ 
    if(obj != null && obj.Inner != null && obj.Inner.Innerer != null) 
    { 
    return obj.Inner.Innerer; 
    } 

    return null; 
} 

Bu şekilde: if (myObject.GetInnerer() != null).... Bu işlevlerin bir kısmını oluşturmanız gerekir, ancak en azından null kontrolünün tek bir yere gitmesini sağlar.

İlgili konular