错误处理——为什么在声明常量时不能使用c#匿名类型

本文关键字:类型 不能 为什么 处理 声明 常量 错误 | 更新日期: 2023-09-27 18:02:09

private const object foo = new {Prop1 = 10, Prop2 = 20};

此代码将输出错误CS0836: Anonymous types cannot be used in this expression。但如果你删除const,它将运行正常。

我真的只是想了解。为什么不能在常量声明中使用匿名类型?

更具体地说:还有什么方法可以声明这样的常量呢?

错误处理——为什么在声明常量时不能使用c#匿名类型

From MSDN

常量可以是数字、布尔值、字符串或空引用

所以这里有一个匿名类型的事实是不相关的:如果你使用自定义类,你会得到一个类似的错误。

在这些情况下考虑使用static readonly字段而不是const

也就是说,在这种情况下拥有object类型的字段是有问题的:没有人引用该字段将能够访问Prop1Prop2,因此该字段可以说是无用的。

考虑定义一个自定义的class(不是匿名类型),它包含你的两个属性,并使用它来代替,例如private static readonly Foo foo = new Foo(10, 20);

据我所知,在c#中,您可以将一组预定义的基本类型声明为常量:更多详细信息可以在这里找到:https://msdn.microsoft.com/en-us/library/ms173119.aspx。匿名类型只是编译器自动写入的不可变引用类型,因此它就像普通引用类型一样,您可以随时写入。