是否有其他方法可以在不使用Reflection的情况下为属性(实例)设置值?

时间:2014-11-26 13:20:40

标签: c# .net silverlight reflection properties

目前,我正在使用Reflection并想知道是否有其他方法可以实现相同目的。

foreach (var propertyInfo in MyObject.GetType().GetProperties())
{
    if (propertyInfo.CanRead)
    {
        if (propertyInfo.Name.Equals(fieldName))
        {
            propertyInfo.SetValue(MyObject, "Some value", null);
            break;
        }
    }
}

2 个答案:

答案 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);
        }
    }
}