2016-05-06 48 views
10

Aşağıdaki kod satırı vardır:Durum 6

Project = x.Project == null ? null : new Model { ... } 

herhangi bir yolu var mı, C# 6'da, bu kod kısaltmak için?

Birkaçına bakıyorum. örnekler ancak bu durumda daha kısa bir çözüm bulamıyorum ...

+3

'Bir' .ToModel (...) ' Yapabileceğin fonksiyon, ama sanırım öyle değil. –

+0

Hayır .ToModel() var ... Evet Yeni C# 6.0 özelliklerine bakıyordum ancak bu örnek için uygulanabilecek hiçbir şey bulamadım. –

+2

Hayır, yapabileceğiniz kadar kısa değil. – CathalMF

cevap

10

.kodunuz olduğu gibi-:

Ancak üstündeki durum Sen olarak değiştirebilirsiniz

if(x != null) 
    Project = x.Project == null ? null : new Model { ... } 
else 
    Project = null; 

x değerini kontrol etmek eğer gerçekten varsa bir gereken bu koduna göre Olabildiğince kısa. Sınıf Project dayanmaktadır Ancak sen

Project = x.Project?.ToModel(...); 

GÜNCELLEME yapabileceği bir public Model ToModel(...) { } yöntemi vardı: JonSkeet just mentioned olarak ayrıca .ToModel( bir uzantısı yöntemi yapabiliriz.

public static class ExtensionMethods 
{ 
    public static Model ToModel(this Project p, ...) 
    { 
     return new Model { ... }; 
    } 
} 

sözdizimi hala Linq

Project = x.Project?.ToModel(...); 
1

Hayır, Yapabildiğiniz kadar kısa.

Project = x?.Project == null ? null : new Model { ... } 
+0

Bu daha kısa değil ... :-) –

+0

IF koşullarına sahipseniz Göndermediğiniz kodunuzda daha kısadır. IF koşullarını sadece kullanımı ile kaldırabilirsiniz? işaret. – CathalMF

1

değil kısa, fakat alternatif bir çözüm kullanarak olacaktır:

Project` vardı
Model m = new Project[] { x.Project } 
     .Where(p => p != null) 
     .Select(p => new Model { ... }) 
     .FirstOrDefault();