如何使用lambda表达式捕获静态或非静态属性?
使用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
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());
}