2016-05-06 20 views
10

Tôi có dòng sau mã:Điều kiện với null trong C# 6

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

Có cách nào, trong C# 6, để làm cho mã này ngắn hơn?

Tôi đã xem xét một vài? ví dụ nhưng trong trường hợp này, tôi không tìm được giải pháp ngắn hơn ...

+3

Nếu 'project' có một' .ToModel (...) ' bạn có thể, nhưng tôi không nghĩ như vậy. –

+0

Không có nó. ToModel() ... Có, tôi đã xem xét các tính năng C# 6.0 mới nhưng đối với ví dụ này tôi không thể tìm thấy bất kỳ thứ gì có thể được áp dụng. –

+2

Không, nó ngắn như bạn có thể làm cho nó. – CathalMF

Trả lời

10

Như-là mã của bạn là ngắn nhất có thể. Tuy nhiên, nếu lớp Project được dựa trên một phương pháp có public Model ToModel(...) { } bạn có thể làm

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

UPDATE: Như JonSkeet just mentioned, bạn cũng có thể làm cho .ToModel( một phương pháp mở rộng.

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

Cú pháp vẫn sẽ

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

Không, ngắn gọn như bạn có thể làm.

Tuy nhiên dựa trên mã này bạn thực sự cần phải có một nếu tình trạng trên nó để kiểm tra giá trị của x

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

Bạn có thể thay đổi điều này để:

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

Đó không phải là ngắn hơn ... :-) –

+0

Nếu bạn có điều kiện IF trong mã của bạn mà bạn đã không đăng thì nó ngắn hơn. Bạn có thể loại bỏ các điều kiện IF chỉ với việc sử dụng? dấu. – CathalMF

1

Không ngắn hơn, nhưng một giải pháp thay thế sử dụng LINQ:

Model m = new Project[] { x.Project } 
     .Where(p => p != null) 
     .Select(p => new Model { ... }) 
     .FirstOrDefault(); 
Các vấn đề liên quan