如何使用lambda表达式捕获静态或非静态属性?

如何使用lambda表达式捕获静态或非静态属性?,lambda,c#-4.0,Lambda,C# 4.0,使用lambda表达式捕获某些类的属性或方法(如下面的代码)有很多好处 void CaptureProperty<T, TProperty> (Func<T, TProperty> exp) { // some logic to keep exp variable } // So you can use below code to call above method. CaptureProperty<string, int>(x => x.Len

使用lambda表达式捕获某些类的属性或方法(如下面的代码)有很多好处

void CaptureProperty<T, TProperty> (Func<T, TProperty> exp)
{
   // some logic to keep exp variable
}

// So you can use below code to call above method.
CaptureProperty<string, int>(x => x.Length);
void CaptureProperty(Func exp)
{
//保持exp变量的一些逻辑
}
//所以您可以使用下面的代码来调用上面的方法。
CaptureProperty(x=>x.Length);
但是,上面的代码不支持静态属性。那么,如何创建既支持静态属性又支持非静态属性的方法呢

谢谢,

您可以通过以下方式捕获静态属性:

CaptureProperty<string, Encoding>(x => Encoding.UTF8);

然后,当您以后需要调用该函数时,可以检测到“source”类型是
DummyType
。这可能是一个有用的主意,也可能不是,这取决于你在做什么:)

太好了!空参数表达式。我只想将捕获的属性转换为类似“{className}.{propertyName}”的内容,以便发送到JavaScript。@Soul\u Master:在这种情况下,您需要的是
expression
,而不是
Func
void CaptureProperty<T>(Func<T> func)
{
    // Whatever
}
CaptureProperty<Encoding>(() => Encoding.UTF8);
void CaptureProperty<T>(Func<T> func)
{
    CaptureProperty<DummyType, T>(x => func());
}