我想知道我是否可以使用TResult<in T, out TResult>
进行作业
我可以使用该委托检索类实例的属性值,如下所示:
class Program
{
class MyClass
{
public int MyProperty { get; set; }
}
static void Main(string[] args)
{
Func<MyClass, int> orderKeySelector = o => o.MyProperty;
MyClass mc = new MyClass() { MyProperty = 3 };
int val = orderKeySelector.Invoke(mc);
}
}
我想使用orderKeySelector和MyClass实例为MyProperty分配一些值。 任何想法?
答案 0 :(得分:1)
您的Func<,>
代表代表属性 getter 。如果您想要一个属性 setter ,则需要Action<MyClass, int>
,如下所示:
Action<MyClass, int> setter = (o, value) => o.MyProperty = value;
答案 1 :(得分:0)
您不能使用orderKeySelector
来实现,但您可以创建一个单独的setter委托:
MyClass mc = new MyClass() { MyProperty = 3 };
Func<MyClass, int> orderKeySelector = o => o.MyProperty;
int val = orderKeySelector(mc);
Console.WriteLine(val); // 3
Action<MyClass, int> orderKeySetter = (o, v) => o.MyProperty = v;
orderKeySetter(mc, 42);
Console.WriteLine(mc.MyProperty); // 42