我是否可以删除此通用表达式中的double lambda需求?

问题描述 投票:0回答:1

我已经制定了这种扩展方法(我现在知道没有异常检查等,一旦我确定函数实际上是正确的,便会添加它:]

public static IEnumerable<TSource> ChangeProperty<TSource, TResult>(this IEnumerable<TSource> source,Expression<Func<TSource,TResult>> res, Func<TSource, TResult> changeProp)
    {
        Type type = typeof(TSource);
        MemberExpression member = res.Body as MemberExpression;
        var name = member.Member.Name;

        foreach (var x in source)
        {
            var prop = type.GetProperty(name);
            prop.SetValue(x, changeProp(x));
            Console.WriteLine(prop.GetValue(x));
        }
        return source;
    }

并且在此上下文中使用(删除不需要的标签会从字符串中删除html标签):

_dc.EmailTemplates
.ChangeProperty(x=>x.Body,z=>RemoveUnwantedTags(z.Body))
.ToList();

但是我不喜欢这样,我必须使用双lambda,一个用于获取属性名称,然后一个用于执行功能。我不知道这是我对Expression <>的工作原理缺乏了解,还是我错过了一些确实很明显但很感谢的帮助!

c# lambda reflection extension-methods
1个回答
1
投票
类似于ForEach中的List<T>如何使用,所需功能可以简化为
© www.soinside.com 2019 - 2024. All rights reserved.