检查属性是否只读

时间:2017-09-16 23:39:11

标签: c# fastmember

我有使用反射的代码,我决定用FastMember替换它。

这是我的代码:

var VehicleType = TypeAccessor.Create(res.GetType());
var vehicleFastMember = ObjectAccessor.Create(res);

foreach (var kvp in dictionary)
{
    if (kvp.Key == "Identifier") continue;
    object value = kvp.Value;

    if (VehicleType.GetMembers().FirstOrDefault(prop => prop.Name == kvp.Key) != null)
    {
        // here inside if i want to check whether property is not readonly, 
        // I am afraid of runtime exception that readonly cannot be overwritten.
        **if (vehicleFastMember[kvp.Key].)**
        {
            vehicleFastMember[kvp.Key] = kvp.Value;
        }                        
    }
}

反思:

这一行有星星将由这条线解决:

if (property?.CanWrite ?? false)

FastMember也提供一些优雅的解决方案吗?

1 个答案:

答案 0 :(得分:0)

根据fast-member的MemberSet.Member的 the source code,CanRead / CanWrite正在调用您尝试调用的相同方法(PropertyInfo.Can [Read / Write])。

值得注意的是,不是确定属性是否可写,您可以简单地将赋值包装到try / catch中,并捕获将出现的ReadOnlyException并使用循环 continue 。 / p>