为什么 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 The left-hand side of an assignment must be a variable, property or indexer.

实际上 art?.Prop1 是一个 属性,应该被视为有效的分配!
我没有看到使此代码无效的分配问题。

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

此代码:

Article? art

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

art?.Prop1 = "Hi";

这意味着使用 Null propagation/conditional 运算符。

Null propagation/conditional 运算符用于访问属性,而不是设置它们。因此你不能使用它。

正如@Servy 在评论中所说,Null 条件运算符的结果始终是一个值,您不能将一个值赋给一个值,因此会出现错误。

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

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

Article? artNullable<Article> art 的快捷方式 要分配 属性,您需要访问 Nullable<T>.Value 字段。在一般情况下,您需要确保 art 不为空:

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