Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何在对象上动态构建属性_.net_Dynamic - Fatal编程技术网

.net 如何在对象上动态构建属性

.net 如何在对象上动态构建属性,.net,dynamic,.net,Dynamic,看起来,新的“动态”对象让您可以动态创建属性: dynamic v = new object(); v.x = "a"; v.y = "b"; ... 我想知道是否有一个简单的方法来编程创建属性。例如,假设我的属性存储在如下列表中: Tuple<string, string>[] list = new Tuple<string, string>[] { new Tuple<string, string>("x", "a"), new Tuple<

看起来,新的“动态”对象让您可以动态创建属性:

dynamic v = new object();
v.x = "a";
v.y = "b";
...
我想知道是否有一个简单的方法来编程创建属性。例如,假设我的属性存储在如下列表中:

Tuple<string, string>[] list = new Tuple<string, string>[] {
  new Tuple<string, string>("x", "a"),
  new Tuple<string, string>("y", "b"),
};
Tuple[]列表=新的Tuple[]{
新元组(“x”、“a”),
新元组(“y”、“b”),
};
我想反复浏览这个列表,并获得与前面相同的结果

dynamic v = new object();
foreach (Tuple<string, string> keyValue in list) {
    // somehow create a property on v that is named keyValue.Item1 and has a value KeyValue.Item2            
}
dynamic v=新对象();
foreach(列表中的元组键值){
//以某种方式在v上创建一个名为keyValue.Item1的属性,该属性的值为keyValue.Item2
}

我想知道这是否可能。

您的初始代码不正确。它将在执行时失败。如果您改为使用,那么它将起作用-然后您也可以通过编程实现,使用
ExpandoObject
实现
IDictionary
。但是,它使用显式接口实现来实现它,因此您首先需要具有该类型的表达式。例如:

dynamic d = new ExpandoObject();
IDictionary<string, object> dictionary = d;
dictionary["key"] = "value";
Console.WriteLine(d.key); // Prints "value"
dynamic v = new ExpandoObject();
IDictionary<string, object> dictionary = v;
foreach (Tuple<string, string> keyValue in list)
{
    dictionary[keyValue.Item1] = keyValue.Item2;
}
dynamic d=newexpandoobject();
词典=d;
字典[“键”]=“值”;
控制台。写入线(d键);//打印“值”
或者举个例子:

dynamic d = new ExpandoObject();
IDictionary<string, object> dictionary = d;
dictionary["key"] = "value";
Console.WriteLine(d.key); // Prints "value"
dynamic v = new ExpandoObject();
IDictionary<string, object> dictionary = v;
foreach (Tuple<string, string> keyValue in list)
{
    dictionary[keyValue.Item1] = keyValue.Item2;
}
dynamic v=newexpandoobject();
词典=v;
foreach(列表中的元组键值)
{
字典[keyValue.Item1]=keyValue.Item2;
}

顺便说一句,我个人会使用
KeyValuePair
而不是
Tuple
,因为这就是您在这里得到的。

您的初始代码不正确。它将在执行时失败。如果您改为使用,那么它将起作用-然后您也可以通过编程实现,使用
ExpandoObject
实现
IDictionary
。但是,它使用显式接口实现来实现它,因此您首先需要具有该类型的表达式。例如:

dynamic d = new ExpandoObject();
IDictionary<string, object> dictionary = d;
dictionary["key"] = "value";
Console.WriteLine(d.key); // Prints "value"
dynamic v = new ExpandoObject();
IDictionary<string, object> dictionary = v;
foreach (Tuple<string, string> keyValue in list)
{
    dictionary[keyValue.Item1] = keyValue.Item2;
}
dynamic d=newexpandoobject();
词典=d;
字典[“键”]=“值”;
控制台。写入线(d键);//打印“值”
或者举个例子:

dynamic d = new ExpandoObject();
IDictionary<string, object> dictionary = d;
dictionary["key"] = "value";
Console.WriteLine(d.key); // Prints "value"
dynamic v = new ExpandoObject();
IDictionary<string, object> dictionary = v;
foreach (Tuple<string, string> keyValue in list)
{
    dictionary[keyValue.Item1] = keyValue.Item2;
}
dynamic v=newexpandoobject();
词典=v;
foreach(列表中的元组键值)
{
字典[keyValue.Item1]=keyValue.Item2;
}

顺便说一句,我个人会使用
KeyValuePair
而不是
Tuple
,因为这就是你在这里得到的东西。

你只能在对象支持的情况下“添加属性”。。。而
对象
类型不起作用,因此在这种情况下它将不起作用。如果此问题与您的ExpandoObject相关,则ExpandoObject不是解决方法。您只能在对象支持的情况下“添加属性”。。。而
对象
类型不起作用,因此在这种情况下它不起作用。如果这个问题与您的相关,那么ExpandoObject就不是办法。我想您指的是
d.key
,而不是
dictionary.key
@thomasleveque:是-修复了。我想您指的是
d.key
,而不是
dictionary.key
@ThomasLevesque:Yup-已修复。