如何使用函数<>设置属性
How to Set a property using a func<>
假设我有一个函数 我如何设置记录属性
public void SetProperty<TRecord, TEnum>(TRecord item,
Func<TRecord, TEnum> property, string enumValue )
where TEnum : struct
where TRecord : class
{
TEnum enumType;
if (Enum.TryParse(enumValue, true, out enumType))
{
//How Do I set this?
property.Invoke(item) = enumType;
}
}
我不想将其转换为表达式。有谁知道如何设置 属性?
public void SetProperty<TRecord, TEnum>(TRecord item,
Action<TRecord, TEnum> property, string enumValue)
where TEnum : struct
where TRecord : class
{
TEnum enumType;
if (Enum.TryParse(enumValue, true, out enumType))
{
property(item, enumType);
}
}
更好的方法...
public TEnum? AsEnum<TEnum>(string enumValue)
where TEnum : struct
{
TEnum enumType;
if (Enum.TryParse(enumValue, true, out enumType))
{
return enumType;
}
return default(TEnum);
}
使用示例...
myObj.Prop = AsEnum<MyEnum>("value") ?? MyEnum.Default;
//versus
SetPropery<MyObject, MyEnum>(myobj, (r, e) => r.Prop = e, "value");
假设我有一个函数 我如何设置记录属性
public void SetProperty<TRecord, TEnum>(TRecord item,
Func<TRecord, TEnum> property, string enumValue )
where TEnum : struct
where TRecord : class
{
TEnum enumType;
if (Enum.TryParse(enumValue, true, out enumType))
{
//How Do I set this?
property.Invoke(item) = enumType;
}
}
我不想将其转换为表达式。有谁知道如何设置 属性?
public void SetProperty<TRecord, TEnum>(TRecord item,
Action<TRecord, TEnum> property, string enumValue)
where TEnum : struct
where TRecord : class
{
TEnum enumType;
if (Enum.TryParse(enumValue, true, out enumType))
{
property(item, enumType);
}
}
更好的方法...
public TEnum? AsEnum<TEnum>(string enumValue)
where TEnum : struct
{
TEnum enumType;
if (Enum.TryParse(enumValue, true, out enumType))
{
return enumType;
}
return default(TEnum);
}
使用示例...
myObj.Prop = AsEnum<MyEnum>("value") ?? MyEnum.Default;
//versus
SetPropery<MyObject, MyEnum>(myobj, (r, e) => r.Prop = e, "value");