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