是否可以创建new {variable = x.something}
并动态指定变量名称?例如:LINQ中的动态新字段
var name = "dynamicName";
var result = context.select(x=> new {name.ToString() = x.something })
通过这种方式,我们将拥有一个列表,其中属性名称为dynamicName。 那么这是不可能的?
是否可以创建new {variable = x.something}
并动态指定变量名称?例如:LINQ中的动态新字段
var name = "dynamicName";
var result = context.select(x=> new {name.ToString() = x.something })
通过这种方式,我们将拥有一个列表,其中属性名称为dynamicName。 那么这是不可能的?
这对于匿名类型是不可能的,因为匿名类型不是动态的。它们必须在编译时完全定义。但是,你可以使用动态的物体,像ExpandoObject
:
var name = "dynamicName";
var result = context.Select(x =>
{
var exp = new ExpandoObject() as IDictionary<string, object>;
exp[name] = x.something;
return (dynamic)exp;
});
使用
Dictionary<string,string> myDic
然后
myDic.Add(name.ToString(), x.something)
+1,但我会建议'Dictionary
@Bazzz是的,好点。 – 2012-03-30 09:30:43
您可以用Reflection.Emit的运行时创建匿名类型,但它不是非常容易(http://www.codeproject.com/Articles/13337/Introduction-to-Creating-Dynamic-Types-with-Reflec)。通常,对我们来说,更好的方法是使用`NameValueCollection`而不是匿名类型来代替您的字符串,数组或动态的
。 http://msdn.microsoft.com/en-us/library/system.collections.specialized.namevaluecollection.aspx – Bazzz 2012-03-30 09:00:18
为什么你需要这样的东西? – 2012-03-30 09:02:48
@Daniel例如动态创建列名 – kosnkov 2012-03-30 09:05:36