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
类型不能再被隐式推断。我不反对。。。基于他的要求的模式并不完美。