使用TResult Func进行分配<in t,=“”out =“”tresult =“”> </in>

时间:2010-08-20 09:56:54

标签: c# delegates variable-assignment

我想知道我是否可以使用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分配一些值。 任何想法?

2 个答案:

答案 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