C# 如何使用func设置属性<&燃气轮机;
假设我有一个函数如何设置记录的属性C# 如何使用func设置属性<&燃气轮机;,c#,reflection,func,C#,Reflection,Func,假设我有一个函数如何设置记录的属性 public void SetProperty<TRecord, TEnum>(TRecord item, Func<TRecord, TEnum> property, string enumValue ) where TEnum : struct where TRecord : class { TEnum enumType;
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项,
Func属性,字符串枚举值)
其中TEnum:struct
特科德:课堂
{
TEnum型;
if(Enum.TryParse(enumValue、true、out enumType))
{
//我怎么设置这个?
调用(项)=枚举类型;
}
}
我不想把这个换成一个表达式。有人知道如何设置属性吗?public void SetProperty(TRecord项,
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);
}
}
操作属性,字符串枚举值)
其中TEnum:struct
特科德:课堂
{
TEnum型;
if(Enum.TryParse(enumValue、true、out enumType))
{
属性(项目、枚举类型);
}
}
更好的方法
public TEnum? AsEnum<TEnum>(string enumValue)
where TEnum : struct
{
TEnum enumType;
if (Enum.TryParse(enumValue, true, out enumType))
{
return enumType;
}
return default(TEnum);
}
public TEnum?AsEnum(字符串枚举值)
其中TEnum:struct
{
TEnum型;
if(Enum.TryParse(enumValue、true、out enumType))
{
返回枚举类型;
}
返回默认值(十纳姆);
}
用法示例
myObj.Prop = AsEnum<MyEnum>("value") ?? MyEnum.Default;
//versus
SetPropery<MyObject, MyEnum>(myobj, (r, e) => r.Prop = e, "value");
myObj.Prop=AsEnum(“值”)??MyEnum.Default;
//对
设置属性(myobj,(r,e)=>r.Prop=e,“值”);
这完全不可能。给定一个(假设)调用属性getter的委托,无法获取setter。您试图解决什么问题?告诉我们问题是什么,我们将找出解决方法,而不是向我们展示您针对某个未知问题提出的解决方案。简单的方法是从Func
更改为Action
,然后用SetProperty(item,(r,e)=>r.property=e,“value”)调用它
SetProperty在这里很可能帮不了你,除非你认为你需要反射提供的额外间接层次,但我认为你不需要。如果不使用表达式(OP说他想避免),这是唯一的方法。但是,它使调用代码变得更加复杂,这既因为它引入了第二个lambda参数,也因为泛型TEnum
类型不能再被隐式推断。我不反对。。。基于他的要求的模式并不完美。