看来,新的"动态"对象让您可以动态创建属性:
dynamic v = new object();
v.x = "a";
v.y = "b";
...
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一种简单的方法以编程方式创建属性.例如,假设我的属性存储在列表中,如下所示:
Tuple<string, string>[] list = new Tuple<string, string>[] {
new Tuple<string, string>("x", "a"),
new Tuple<string, string>("y", "b"),
};
Run Code Online (Sandbox Code Playgroud)
我想迭代这个列表并获得与之前相同的结果.
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
}
Run Code Online (Sandbox Code Playgroud)
我想知道这是否可能.
您的初始代码不正确.它会在执行时失败.如果您使用ExpandoObject,那么它将工作 - 然后您也可以使用ExpandoObject实现的事实以编程方式执行IDictionary<string, object>.但是,它使用显式接口实现来实现它,因此您需要首先使用该类型的表达式.例如:
dynamic d = new ExpandoObject();
IDictionary<string, object> dictionary = d;
dictionary["key"] = "value";
Console.WriteLine(d.key); // Prints "value"
Run Code Online (Sandbox Code Playgroud)
或者为你的例子:
dynamic v = new ExpandoObject();
IDictionary<string, object> dictionary = v;
foreach (Tuple<string, string> keyValue in list)
{
dictionary[keyValue.Item1] = keyValue.Item2;
}
Run Code Online (Sandbox Code Playgroud)
我个人使用KeyValuePair而不是Tuple顺便使用 - 因为这就是你在这里所拥有的.
| 归档时间: |
|
| 查看次数: |
68 次 |
| 最近记录: |