2016-05-06 12 views
10

Mam następującą linię kodu:Stan NULL w C# 6

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

Czy istnieje jakikolwiek sposób, w C# 6, aby ten kod krótszy?

Widziałem kilka? przykłady, ale w tym przypadku nie mogę znaleźć krótszego rozwiązania ...

+3

Jeśli 'project' miał' .ToModel (...) ' funkcję, którą możesz, ale nie sądzę, że tak jak jest. –

+0

Nie, nie ma modelu .ToModel() ... Tak, patrzyłem na nowe funkcje C# 6.0, ale dla tego przykładu nie mogłem znaleźć niczego, co można by zastosować. –

+2

Nie, jest tak krótki, jak to tylko możliwe. – CathalMF

Odpowiedz

10

jak jest Twój kod jest tak krótka, jak to tylko możliwe. Jednak jeśli klasa Project oparta jest na miał public Model ToModel(...) { } sposób można zrobić

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

UPDATE: Jak JonSkeet just mentioned, można również dokonać .ToModel( metodę rozszerzenia.

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

Składnia nadal będzie

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

Nie, jest tak krótki, jak to tylko możliwe.

Jednak na podstawie tego kodu należy rzeczywiście warunek nad nią jakby chciał sprawdzić wartość x

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

można zmienić na:

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

To nie jest krótsze ... :-) –

+0

Jeśli masz warunki IF w twoim kodzie, którego nie pisałeś, jest krótszy. Możesz usunąć warunki IF za pomocą tylko? znak. – CathalMF

1

nie krócej, ale alternatywne rozwiązanie przy użyciu LINQ:

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