在匿名类型中使用变量

时间:2015-02-09 23:42:54

标签: c#

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

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

我希望很清楚我要求的是什么

2 个答案:

答案 0 :(得分:3)

不,不是。您实际上并未创建动态对象,而是创建匿名类型。因此,应该静态地知道成员的名称。如果您想在运行时添加/删除属性,请查看ExpandoObject。但是您仍然必须指定属性名称,如obj.bar,您认为不是可能使用动态。

编辑:您已经更改了问题,但答案仍然存在。仍然无法实现。您无法动态指定标识符。唯一的方法是使用{在运行时创建动态属性{3}}。这样你就可以给出你想要的任何名字属性。但显然这不是一种理想的方式,可能对你的情况来说太多的开销。也许你可以使用Dictionary达到你想要的效果,但由于你没有提供任何关于你将在何处使用它的信息,我无法肯定地说出任何事情。

答案 1 :(得分: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是一个运行时定义类型。