gpt4 book ai didi

c# - 如何将 lambda 表达式传递给需要 lambda 表达式的方法?

转载 作者:太空宇宙 更新时间:2023-11-03 12:57:14 25 4
gpt4 key购买 nike

我有一个扩展方法来获取字符串形式的属性名称:

    public static string GetPropertyName<T, TResult>(this T obj, Expression<Func<T, TResult>> propertyId)
{
return ((MemberExpression)propertyId.Body).Member.Name;
}

现在我有另外一种方法,希望传入这种属性lamba表达式的list(param)。我希望这个新方法重用第一个方法,但不知道如何传递它

    public string Test<T>(params Expression<Func<T, object>>[] ps)
{
foreach (var p in ps)
{
var howToCodeThis = p.GetPropertyName(dummy => dummy);

预期用途:

                var result = Test<Something>(request.Sorting
, x => x.prop1
, x => x.prop2
, x => x.prop3
);

更新:一旦我更改我的 GetPropertyName 以迎合 UnaryExpression,支持答案就起作用了:

    public static string GetPropertyName<T, TResult>(this T obj, Expression<Func<T, TResult>> propertyId)
{
if (propertyId.Body is MemberExpression)
return ((MemberExpression)propertyId.Body).Member.Name;

if (propertyId.Body is UnaryExpression)
{
var op = ((UnaryExpression)propertyId.Body).Operand;
return ((MemberExpression)op).Member.Name;
}

throw new NotImplementedException(string.Format("GetPropertyName - {0}", propertyId.Body.GetType().FullName));
}

最佳答案

var howToCodeThis = GetPropertyName(default(T), p);

var howToCodeThis = default(T).GetPropertyName(p);

但我注意到,您没有在 GetPropertyName 方法中使用 obj

关于c# - 如何将 lambda 表达式传递给需要 lambda 表达式的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33496761/

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