gpt4 book ai didi

c# - 用于 Fluent Interface 的嵌套 Lambda

转载 作者:太空宇宙 更新时间:2023-11-03 11:53:26 24 4
gpt4 key购买 nike

给定以下类型:

class Parent { List<Child> Children {get;set;}}
class Child {List<Child> GrandChildren {get;set;}}

class Helper<TEntity> {List<string> Properties {get;set;}}

并在 Helper 上给出以下方法...

public Helper AddProps<TEntity, TProp>(Expression<Func<TEntity, TProp>> exp)
{
this.Properties.Add(GetPropInfo(exp).Name);
}

public PropertyInfo GetPropInfo(Expression<Func<TEntity, TProp>> exp)
{
return (PropertyInfo)((MemberExpression)(expression.Body)).Member;
}

我能做到:

Helper<Parent> myHelper = new Helper<Parent>();
myHelper.AddProps(x => x.Children);

myHelper 上的字符串列表“Properties”将包含值“Children”,即通过表达式传递的属性的名称。

我现在想做的是能够实现同样的事情,只是具有反射(reflect)类型层次的能力。

会不会是这个样子?

x => x.Children { xx => xx.GrandChildren }

或者甚至可能,会涉及什么?我以前见过嵌套的 lambda,但不知道其中涉及什么。

提前致谢!

编辑

似乎有些困惑,所以我会尽力澄清。我希望能够使用 lambda 表达式和方法链创建一个类似于“Object.SubObject.SubSubObject”的字符串。我的例子是这样做的,但只针对一层深度(一个类的属性)。我想做的是将其扩展到任何深度。

例如,我想使用具有流畅界面的 lambda 表达式,看起来像这样....

AddProps(x => x.Children).AddProps(xx => xx.GrandChildren) 会将“Children.GrandChildren”添加到我的“属性”字符串列表中。

最佳答案

如果 AddProps 方法是通用的,而不是整个 Helper 类,这可能会使事情变得更容易。

这样你就可以得到这样的代码:

var helper = new Helper();
helper.AddProps<Parent>(x => x.Children);
helper.AddProps<Child>(x => x.GrandChildren);

您可能还希望保留的不仅仅是属性名称,以便您知道该属性属于哪种类型。我猜你可以有一个字典来存储你注册的每种类型的属性。

附言了解您为什么要这样做可能有助于 SO 社区更好地回答您的问题。

关于c# - 用于 Fluent Interface 的嵌套 Lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1414264/

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