有没有其他方法可以在不使用反射的情况下为(实例的)属性设置值
本文关键字:实例 设置 属性 情况下 反射的 方法 其他 有没有 | 更新日期: 2023-09-27 18:32:09
目前,我正在使用反射,想知道是否有其他方法可以实现相同的目标。
foreach (var propertyInfo in MyObject.GetType().GetProperties())
{
if (propertyInfo.CanRead)
{
if (propertyInfo.Name.Equals(fieldName))
{
propertyInfo.SetValue(MyObject, "Some value", null);
break;
}
}
}
您可以使用比现有版本更快的反射版本(不需要循环):
var propertyInfo = MyObject.GetType().GetProperty(fieldName);
if (propertyInfo != null && propertyInfo.CanRead)
propertyInfo.SetValue(MyObject, "Some value", null);
除了反射之外,我相信你可以直接发出IL代码 - 看看"FastMember"(尽管我不确定Silverlight是否可以支持这种方法)。
如果您所拥有的只是一个属性名称的字符串,那么我不知道有什么更好的方法,然后反射,但是循环发布的代码效率不高。
HashSet<String> properties = new HashSet<String>();
// add the properties
foreach (var propertyInfo in MyObject.GetType().GetProperties())
{
if (propertyInfo.CanRead)
{
if (properties.Contains(propertyInfo.Name))
{
propertyInfo.SetValue(MyObject, "Some value", null);
}
}
}