为什么我不能返回静态只读字段?

时间:2017-07-04 21:49:52

标签: c# return ref c#-7.0

以下代码无法使用C# 7.0 / Visual Studio 2017.2进行编译:

class C {
    private static readonly int s = 5;
    public static ref int Data => ref s;
}

是否存在禁止静态只读字段引用的技术原因,或者这只是一个缺失的功能?

错误消息显示:

  

CS8162:无法通过引用返回静态只读字段。

3 个答案:

答案 0 :(得分:10)

因为它是readonly

ref的要点是允许更改引用的变量,这会违反readonly

答案 1 :(得分:3)

你不能返回对只读字段的引用,因为ref返回是可变的。但是,ref readonly功能计划用于未来版本的C#(currently pencilled in for C# 7.2, but that may change)。

此功能可能既解决了返回对只读字段的引用的能力,又允许ref参数也被标记为只读,以保证引用的值不会被修改方法

答案 2 :(得分:2)

现在可以在C#7.2中使用。

class C {
    private static readonly int s = 5;
    public static ref readonly int Data => ref s;
}