gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 00:07:38 26 4
gpt4 key购买 nike

使用 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);

但是,上面的代码不支持静态属性。那么,如何创建同时支持静态属性和非静态属性的方法呢?

谢谢,

最佳答案

好吧,您可以通过这种方式捕获静态属性:

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

然后,您需要在执行时提供一个“虚拟”值......

另一种方法是提供另一个只有一个类型参数的重载:
void CaptureProperty<T>(Func<T> func)
{
// Whatever
}

使用是这样的:
CaptureProperty<Encoding>(() => Encoding.UTF8);

这就是你所追求的吗?

如果你想在内部统一这两者,你可以在与 CaptureProperty 相同的类型中拥有一个“虚拟”私有(private)嵌套类型。并像这样实现静态版本:
void CaptureProperty<T>(Func<T> func)
{
CaptureProperty<DummyType, T>(x => func());
}

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

关于lambda - 如何使用 lambda 表达式捕获静态或非静态属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1939168/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com