目前,我正在使用Reflection并想知道是否有其他方法可以实现相同目的。
foreach (var propertyInfo in MyObject.GetType().GetProperties())
{
if (propertyInfo.CanRead)
{
if (propertyInfo.Name.Equals(fieldName))
{
propertyInfo.SetValue(MyObject, "Some value", null);
break;
}
}
}
答案 0 :(得分:1)
您可以使用比您拥有的更快的反射版本(不需要循环):
var propertyInfo = MyObject.GetType().GetProperty(fieldName);
if (propertyInfo != null && propertyInfo.CanRead)
propertyInfo.SetValue(MyObject, "Some value", null);
除了反思,我相信你可以直接发出IL代码 - 看看"FastMember"(虽然我不确定Silverlight是否支持这种方法)。
答案 1 :(得分:0)
如果您拥有的只是属性名称的字符串,那么我不知道任何更好的方式然后反射,但是在发布的代码上循环效率不高。
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);
}
}
}