Null propagating operator/Conditional access expression đến trong c#-6.0 trông giống như một tính năng khá tiện dụng. Nhưng tôi tò mò nếu nó sẽ giúp giải quyết vấn đề kiểm tra nếu một thành viên trẻ không phải là null và sau đó gọi một phương thức Boolean trên cho biết thành viên trẻ bên trong một khối nếu:C# Null tuyên truyền nhà điều hành/biểu thức truy cập có điều kiện và nếu khối
public class Container<int>{
IEnumerable<int> Objects {get;set;}
}
public Container BuildContainer()
{
var c = new Container();
if (/* Some Random Condition */)
c.Objects = new List<int>{1,2,4};
}
public void Test()
{
var c = BuildContainer();
//Old way
if (null != c && null != c.Objects && c.Objects.Any())
Console.Write("Container has items!");
//C# 6 way?
if (c?.Object?.Any())
Console.Write("Container has items!");
}
sẽ c?.Object?.Any()
biên dịch? Nếu các nhà điều hành truyền ngắn mạch (tôi giả định đó là đúng hạn) để null sau đó bạn có if (null)
, mà không hợp lệ.
Đội C# có giải quyết được mối lo ngại này hoặc tôi có thiếu trường hợp sử dụng dự định cho toán tử tuyên truyền không?
Vì vậy, '.' không thực sự trả về null? Nó trả về một 'Nullable'? –
@PhilipPittle nó kết thúc tốt đẹp giá trị trả về trong 'Nullable' cho giá trị và kiểu nguyên thủy –
Hoặc, một số có thể thích sử dụng toán tử kết hợp null:' if (c? .Objects? .Any() ?? false) {...} ' –