gpt4 book ai didi

c# - Lambda 属性值选择器作为参数

转载 作者:IT王子 更新时间:2023-10-29 04:18:56 25 4
gpt4 key购买 nike

我需要修改一个方法,以便它有一个额外的参数,该参数将采用一个 lambda 表达式,该表达式将用于内部对象以返回给定属性的值。请原谅我可能不正确地使用术语,因为这是我第一次涉足 LINQ 表达式!

我曾尝试寻找答案,但正如我所提到的,我的术语似乎不合时宜,而且我能找到的示例过于复杂或处理集合函数的表达式,例如 .Where(),我很熟悉。

到目前为止我有什么(缩减版):

class MyClass
{
private MyObject _myObject = new MyObject() { Name = "Test", Code = "T" };

private string MyMethod(int testParameter, ??? selector)
{
//return _myObject.Name;
//return _myObject.Code;
return ???;
}
}

我想这样调用它:

string result = _myClassInstance.MyMethod(1, (x => x.Name));

或:

string result = _myClassInstance.MyMethod(1, (x => x.Code));

显然我缺少的部分是 MyMethod 中的 selector 参数,如何将它应用于局部变量以及如何将所需的属性传递给方法我正在调用它。

我们将不胜感激任何帮助,对于 VB.NET 解决方案还有额外的奖励积分,不幸的是最终实现需要在我们单独的 VB 项目中!

最佳答案

private string MyMethod(int testParameter, Func<MyObject, string> selector)
{
return selector(_myObject);
}

当使用 Func 委托(delegate)时,最后一个参数是返回类型,前 N-1 个是参数类型。在这种情况下,selector 有一个 MyObject 参数,它返回一个 string

您可以像这样调用它:

string name = _myClassInstance.MyMethod(1, x => x.Name);
string result = _myClassInstance.MyMethod(1, x => x.Code);

由于 MyMethod 的返回类型与您的 selector 委托(delegate)的返回类型匹配,您可以将其设为通用:

private T MyMethod<T>(int testParameter, Func<MyObject, T> selector)
{
MyObject obj = //
return selector(obj);
}

我不知道 VB.Net,但看起来应该是:

Public Function MyMethod(testParameter as Integer, selector as Func(Of MyObject, String))
Return selector(_myObject)
End Function

通用版本是:

Public Function MyMethod(Of T)(testParameter as Integer, selector Func(Of MyObject, T))
Return selector(_myObject)
End Function

关于c# - Lambda 属性值选择器作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16676854/

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