为什么在声明常量时不能使用C#匿名类型?

Alv*_*nço 3 c# error-handling const

private const object foo = new {Prop1 = 10, Prop2 = 20};
Run Code Online (Sandbox Code Playgroud)

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

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

更具体地说:应该用什么方式来声明这样的常量?

can*_*on7 6

来自MSDN

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

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

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

也就是说,object在这种情况下拥有一个类型的领域是值得怀疑的:没有人引用该领域将能够访问Prop1Prop2,因此该领域可以说是无用的.

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


Geo*_*ica 2

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