2015-02-09 105 views
0

是否可以将匿名类型中的变量的值用作属性名称?在匿名类型中使用变量

var foo = "bar"; 
var anon = new {foo = _list}; 
//    ^foo should be "bar" 

我希望这是清楚我所要求的

+0

你是什么意思的“标识符”? – 2015-02-09 23:57:14

回答

3

不,事实并非如此。你实际上并没有创建一个动态对象,你正在创建一个匿名类型。所以成员的名字应该是静态的。如果你想在运行时添加/删除属性,可以看看ExpandoObject。但是你仍然必须指定属性名称,如obj.bar,这是你认为不可能使用动态的方式。

编辑:你已经改变了你的问题,但答案remains.It仍不possible.You不能指定的标识符dynamically.The只有做到使用Reflection Emit。而这种方式是在运行时创建的动态特性的方法你可以给任何名字你想要的属性。但显然这不是一个理想的方式,可能会造成你的情况太多的开销。也许你可以使用Dictionary来达到你想要的效果,但由于你没有提供任何关于你将在哪里使用的信息,所以我无法确定。

+0

感谢您的回答。我*修复了*我的问题。 – Brettetete 2015-02-09 23:49:19

1

不清楚你在问什么。

在你的榜样,您创建了一个匿名类型与属性名为foo,那么相同类型的_list:

var foo = "bar"; // has no effect on bellow line 
var dyn = new {foo = _list}; // foo will be same type (and value) as _list 

“FOO”内匿名类型是一个场,富在外部范围一个局部变量。它们是两个不同的变量参考,它们可以具有相同的参考值(即指向相同的变量),例如在下面的例子中。

也许你的意思是这样:

var dyn = new {foo = _list}; 
var foo = dyn.foo; 

此外,VAR =动态! var是隐式编译时定义的类型,dynamic是运行时定义的类型。