2011-02-25 58 views
0

我在想我應該可以使用某種表達式作爲下面最後一種方法的參數,但是我一直無法解決它。傳遞一個屬性來獲取它的值(作爲一個表達式?)

我該怎麼做?

乾杯,
Berryl

class Detail{ 
    string DisplayName{get;set;} 
    string SpanishName{get;set;} 
    string FrenchName{get;set;} 
} 

class Master{ 
    IEnumerable<Detail> AllDetail{get;set;} 
    bool DoSpanish(get;set;) 
    bool DoFrench(get;set;) 

    _flipDisplayName(){ 
     DoSpanish 
      ? _flipDisplayName(x=>x.SpanishName) 
      : _flipDisplayName(x=>x.FrenchName); 
    } 

    // ***************************************************** 
    _flipDisplayName(????){ <==== Expression?? 
      foreach(Detail detail in AllDetail) detail.DisplayName = ???; 
    } 

} 

回答

4

嘗試像

_flipDisplayName(Func<Detail, string> name){ 
    foreach(Detail detail in AllDetail) 
     detail.DisplayName = name(detail); 
} 

既然你不需要分析表達的通過,一個Func<,>就足夠了。

您也可以使用Expression<Func<,>>這將允許您解析提供的表達式以確定它是指英語還是西班牙語屬性,但在這種情況下這不是必需的。

+0

甜 - 謝謝! – Berryl 2011-02-25 19:47:02

0

退房Get value from ASP.NET MVC Lambda Expression。這是在MVC的背景下,但答案適用於任何地方。

+0

Marcind是對的 - 我已經回答了你居然問這個問題,但他回答你真正需要的東西:) – 2011-02-25 19:42:57

1

如果我正確理解你的目標,你可以這樣做:

private void _flipDisplayName(Func<Detail, string> displayFunc) 
{ 
     foreach(Detail detail in AllDetail) 
      detail.displayFunc(detail); 
} 

的其他重載便可設爲:

private void _flipDisplayName() 
{ 
    this.DoSpanish ? _flipDisplayName(x => x.SpanishName) 
        : _flipDisplayName(x => x.FrenchName); 
} 
相關問題