将值从字典分配给动态对象 C#

Ole*_*egI 3 .net c# dictionary dynamic

有一个带有值的字典。它需要将每个值分配给动态实例属性。并且动态变量属性的名称应与字典的键相同。像这样的东西:

dynamic response = new ExpandoObject();
var dict = new Dictionary<string, string>();
string s;
dict.TryGetValue("Name", out s); // imagine dictionary contains some data
response.Name = s;
dict.TryGetValue("Street", out s);
response.Street = s;
....
Run Code Online (Sandbox Code Playgroud)

我确信有一些更有效的方法然后只是迭代每个值。如果要创建for循环,每次如何描述动态实例属性名称?谢谢你。

D S*_*ley 6

ExpandoObject实现,IDictionary<string,?object>因为这就是它存储“属性”值的方式,所以你可以这样做:

var response = new ExpandoObject();
var dict = new Dictionary<string, string>();
// imagine dict contains some data
foreach(var kvp in dict)
{
     (response as IDictionary<string, object>)[kvp.Key] = kvp.Value;
}
Run Code Online (Sandbox Code Playgroud)

请注意,我没有dynamic在这里使用,因为您没有ExpandoObject动态访问的属性。它可能不会产生巨大的差异,但如果您经常使用这种方法,它可能会提高整体性能,因为索引器将在编译时而不是在运行时绑定。