让我说我得到了这个:
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);
答案 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。