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

时间:2015-07-11 16:32:47

标签: c# error-handling const

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

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

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

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

2 个答案:

答案 0 :(得分:6)

来自MSDN

  

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

因此,此处存在匿名类型这一事实并不重要:如果您使用的是自定义类,则会出现类似的错误。

对于这些情况,请考虑使用static readonly字段而不是const

也就是说,在这种情况下使用object类型的字段是值得怀疑的:引用该字段的任何人都无法访问Prop1Prop2,因此这个领域可以说是没用的。

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

答案 1 :(得分:2)

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