Tom*_*han 53 c# iteration properties anonymous-types
我想将一个匿名对象作为方法的参数,然后迭代其属性以将每个属性/值添加到动态ExpandoObject.
所以我需要的是去
new { Prop1 = "first value", Prop2 = SomeObjectInstance, Prop3 = 1234 }
Run Code Online (Sandbox Code Playgroud)
了解每个属性的名称和值,并能够将它们添加到ExpandoObject.
我该如何做到这一点?
旁注:这将在我的许多单元测试中完成(我用它来重构设置中的大量垃圾),因此性能在某种程度上是相关的.我不太了解反思,肯定地说,但从我所知道的那里,它的性能非常重,所以如果有可能我宁愿避免它......
后续问题:
正如我所说,我将这个匿名对象作为方法的参数.我应该在方法的签名中使用什么数据类型?如果我使用,object是否所有房产都可用?
BFr*_*ree 69
foreach(var prop in myVar.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public))
{
Console.WriteLine("Name: {0}, Value: {1}",prop.Name, prop.GetValue(myVar,null));
}
Run Code Online (Sandbox Code Playgroud)
反映匿名对象以获取其属性名称和值,然后利用ExpandoObject实际上是一个字典来填充它.这是一个例子,表示为单元测试:
[TestMethod]
public void ShouldBeAbleToConvertAnAnonymousObjectToAnExpandoObject()
{
var additionalViewData = new {id = "myControlId", css = "hide well"};
dynamic result = new ExpandoObject();
var dict = (IDictionary<string, object>)result;
foreach (PropertyInfo propertyInfo in additionalViewData.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public))
{
dict[propertyInfo.Name] = propertyInfo.GetValue(additionalViewData, null);
}
Assert.AreEqual(result.id, "myControlId");
Assert.AreEqual(result.css, "hide well");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29635 次 |
| 最近记录: |