2009-08-21 68 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"; 
    } 

谢谢乔恩。