2010-08-20 58 views
0

我不知道是否能做到使用TResult<in T, out TResult> 我可以檢索一個類的實例的屬性與該委託,如下值分配:分配與TResult Func鍵<T中,出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賦值。 任何想法?

回答

1

您的Func<,>代表代表財產獲取者。如果你想有一個屬性二傳手,你需要Action<MyClass, int>,像這樣:

Action<MyClass, int> setter = (o, value) => o.MyProperty = value; 
+0

有效。謝謝。 – 2010-08-20 10:46:11

0

你不能用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 
+0

它的工作原理。感謝您的詳細解釋。 – 2010-08-20 10:46:55

相關問題