动态将属性添加到“动态”类型
本文关键字:动态 类型 添加 属性 | 更新日期: 2023-09-27 18:37:03
如果我有一个属性信息列表,以及它们来自的对象实例,我如何创建另一个包含这些属性和值的对象?
例如
public dynamic Sanitize<T>(T o)
{
if (ReferenceEquals(o, null))
{
return null;
}
var type = o.GetType();
var propertyInfos = type.GetProperties(BindingFlags.Public | BindingFlags.Instance);
dynamic sanitized = new ExpandoObject();
foreach (var propertyInfo in propertyInfos)
{
var name = propertyInfo.Name;
var value = propertyInfo.GetValue(o, null);
// Add this property to `sanitized`
}
return sanitized;
}
您可以将 ExpandoObject 强制转换为IDictionary<string, object>
,然后在运行时对其进行操作以添加属性:
var sanitized = new ExpandoObject() as IDictionary<string, object>;
foreach (var propertyInfo in propertyInfos)
{
var name = propertyInfo.Name;
var value = propertyInfo.GetValue(o, null);
sanitized.Add(name, value);
}