2009-08-21 67 views
0

比方說,我得到這個:通過lambda表達式檢索中通用的方法靜態字段

public class Foo{ 
    public string Bar; 
} 

然後我想創建一個「靜態反映」檢索酒吧的價值是這樣的:

public void Buzz<T>(T instance, Func<T, string> getProperty){ 
    var property = getProperty(instance);   
} 

這應該工作。但是,如果Foo看起來像這樣呢?

public class Foo{ 
    public static string Bar = "Fizz"; 
} 

我可以檢索Bar的值而不通過Foo實例嗎?

用法應該是這樣的:

var barValue = Buzz<Foo>(foo=>foo.Bar); 

回答

2

你會在這種被忽略的參數一個lambda傳遞,並且使用default(T)爲「實例」的使用方法:

var barValue = Buzz<Foo>(x => Foo.Bar); 

我懷疑我」米錯過你的觀點雖然...

+0

這是從哪裏來的想法 - http://www.delphicsage.com/home/blog.aspx/d=131/title=Using_Net_3x_Lambda_Expressions_to_Write_More_Concise_Code – 2009-08-21 10:10:02

+0

對不起,如此含糊 - 問題是,我感覺很不舒服這個話題(試圖改變這一點)。但是你再次敲擊了釘子...... – 2009-08-21 10:19:57

0
class Program 
    { 
     static void Main() 
     { 
      Buzz<Foo>(x => Foo.Bar); 
     } 

     public static void Buzz<T>(Func<T, string> getPropertyValue) 
     { 
      var value = getPropertyValue(default(T)); 
      //value=="fizz" which is what i needed 
     } 
    } 

    public class Foo 
    { 
     public static string Bar = "fizz"; 
    } 

謝謝喬恩。