繁体   English   中英

为什么C#6.0在使用Null传播运算符时不允许设置非null可空结构的属性?

[英]Why C# 6.0 doesn't let to set properties of a non-null nullable struct when using Null propagation operator?

假设我们有以下代码:

struct Article
{
    public string Prop1 { get; set; }
}

Article? art = new Article();
art?.Prop1 = "Hi"; // compile-error

编译错误是

CS0131赋值的左侧必须是变量,属性或索引器。

art?.Prop1是一个属性,应该被认为是一个有效的任务!
我没有看到任何分配使这段代码无效的问题。

为什么C#6.0不允许设置非null可空结构的属性?
或者,任何建议一个行代码使分配有效将不胜感激。

这段代码:

Article? art

将定义一个Nullable<Article>但稍后当你这样做:

art?.Prop1 = "Hi";

这将意味着使用Null传播/条件运算符。

空传播/条件运算符用于访问属性,而不是设置它们。 因此你不能使用它。

正如@Servy在评论中所说,Null条件运算符的结果始终是一个值,您无法为值赋值,因此也就是错误。

如果您只是想设置该属性,那么您不需要? 用对象名称, ? 在声明时使用Nullable<T>类型,这是语法糖:

Nullable<Article> art; //same as Article? art

Article? art Article? art是一条捷径Nullable<Article> art要指派你需要访问财产.Value领域Nullable<T> 一般情况下,您需要确保艺术不是空的:

if (art.HasValue)
{
    art.Value.Prop1 = "Hi"; 
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM