private const object foo = new {Prop1 = 10, Prop2 = 20};
此代码将输出错误CS0836:Anonymous types cannot be used in this expression
。但如果您删除const
,它将运行正常。
我真的只是想了解。为什么不能在常量声明中使用匿名类型?
更具体地说:应该用什么方法来声明这样的常量?
答案 0 :(得分:6)
来自MSDN
常量可以是数字,布尔值,字符串或空引用
因此,此处存在匿名类型这一事实并不重要:如果您使用的是自定义类,则会出现类似的错误。
对于这些情况,请考虑使用static readonly
字段而不是const
。
也就是说,在这种情况下使用object
类型的字段是值得怀疑的:引用该字段的任何人都无法访问Prop1
或Prop2
,因此这个领域可以说是没用的。
考虑定义包含两个属性的自定义class
(不是匿名类型),并使用它来代替,例如private static readonly Foo foo = new Foo(10, 20);
答案 1 :(得分:2)
据我所知,在c#中,您只能将一组预定义的原始类型声明为常量:您可以在此处找到更多详细信息:https://msdn.microsoft.com/en-us/library/ms173119.aspx。匿名类型只是一个由编译器自动编写的不可变引用类型,因此它就像您可以随时编写的普通引用类型一样。