Назначение с TResult Func - PullRequest
       18

Назначение с TResult Func

0 голосов
/ 20 августа 2010

Интересно, могу ли я выполнить присваивание с помощью 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);
    }
}

Я хочу присвоить некоторое значение MyProperty, используяЭкземпляр orderKeySelector и MyClass.Есть идеи?

Ответы [ 2 ]

1 голос
/ 20 августа 2010

Ваш Func<,> представитель представляет свойство getter . Если вы хотите свойство setter , вам нужно Action<MyClass, int>, например:

Action<MyClass, int> setter = (o, value) => o.MyProperty = value;
0 голосов
/ 20 августа 2010

Вы не можете сделать это с orderKeySelector в существующем состоянии, но вы можете создать отдельный делегат сеттера:

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
...