2015-12-10 116 views
0

我试图创建一个内联创建的对象,但我想进入电影我创建内部类的如下因素的属性:公共属性创建动态对象

object x = new { text = "one", text2 = "two" }; 

if (x.text == "one") //can not acces this item in the object 
{ 
    //do somthing 
} 

我知道我可以通过创建,使这项工作一个dynamic对象,但然后我需要真正确保我拼写正确的属性,我不希望这一点。 这段代码发生了什么是我无法访问里面的属性,我怎么能做到这一点,而不使用动态对象,并有机会misstype属性名称?

+2

'对象x = {新文本= “一个”,文本2 = “2”};' - >'变种X = {新文本= “一个”,文本2 = “two”};' –

+0

您正在寻找[匿名类型](https://msdn.microsoft.com/en-us/library/bb397696.aspx) –

+0

难道是因为使用'dynamic'而不是'var'在这里是将该对象传递给函数的范围之外? – Philippe

回答

8

使用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#编译器自动为您创建一个类型,其中包含相关属性(以及构造函数,并覆盖了EqualsGetHashCodeToString)。这种类型的名称是C#难言,但var让你声明该类型的局部变量,允许编译时检查等

var功能被称为implicitly-typed local variables

new { ... }功能被称为anonymous types

0

尝试这种情况:

`dynamic test = new { text = "one", text2 = "two" }; 
var result = test.text;`