通过lambda表达式检索泛型方法中的静态字段

时间:2009-08-21 09:47:04

标签: c# generics lambda

让我说我得到了这个:

public class Foo{
    public string Bar;
}

然后我想创建一个'静态反射'来检索Bar的值,如下所示:

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

那应该有用。但如果Foo看起来像这样呢?

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

我可以在不传递Foo实例的情况下检索Bar的值吗?

用法应如下:

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

2 个答案:

答案 0 :(得分:2)

你传入一个忽略其参数的lambda,并使用default(T)作为“实例”使用:

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

我怀疑我在某种程度上错过了你的观点......

答案 1 :(得分: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";
    }

感谢Jon。