我有使用反射的代码,我决定用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也提供一些优雅的解决方案吗?
答案 0 :(得分:0)
根据fast-member的MemberSet.Member的 the source code,CanRead / CanWrite正在调用您尝试调用的相同方法(PropertyInfo.Can [Read / Write])。
值得注意的是,不是确定属性是否可写,您可以简单地将赋值包装到try / catch中,并捕获将出现的ReadOnlyException并使用循环 continue 。 / p>