我正在尝试创建一个内联创建的对象,但我想访问我在内部创建的属性,如下所示:
object x = new { text = "one", text2 = "two" }; if (x.text == "one") //can not acces this item in the object { //do somthing }
我知道我可以通过创建一个dynamic
对象来完成这项工作,但我需要确保我拼写属性正确,我不想要那个.这段代码发生了什么,我无法访问里面的属性,我怎么能不使用动态对象并有机会错误输入属性名称?
使用var
作为变量的类型,而不是:
var x = new { text = "one", text2 = "two" }; Console.WriteLine(x.text); // Fine, and suggested by Intellisense Console.WriteLine(x.text1); // Compile-time error
请注意,这实际上不是"动态对象",因为属性名称和类型在编译时是已知的.所有这一切发生的是,C#编译器将自动为您与相关属性创建一个类型(和构造,以及覆盖Equals
,GetHashCode
和ToString
).该类型的名称在C#中是不可说的,但var
允许您声明该类型的局部变量,允许编译时检查等.
该var
功能称为隐式类型的局部变量.
该new { ... }
功能称为匿名类型.