gpt4 book ai didi

c# - 谓词和 OrderBy , Func

转载 作者:行者123 更新时间:2023-11-30 13:42:18 26 4
gpt4 key购买 nike

我明白谓词是委托(delegate)给返回 bool 值并采用通用参数的函数,我明白当我说:

mycustomer => mycustomer.fullname == 1

实际意思是:

delegate (Customer mycustomer)
{
return mycustomer.fullName == "John";
}

当我传递这个 lambda 表达式时,我传递的参数是:

public delegate bool Criteria<T>(T value)这在本地称为 Predicate

但我不明白的是当我说 mycustomer=>mycustomer.fullname 是什么意思

customers.OrderBy(mycustomer=>mycustomer.fullname);

我如何实现类似 OrderBy 的东西? ?我如何告诉方法对哪个属性执行操作!喜欢前面的例子吗?

例如,我想创建一个方法来获取特定属性的集合的所有值:

list<string> mylist = customers.GetPropertyValues(cus=>cus.Fullname);

提前致谢。

最佳答案

Func<TElement,TKey>用于创建 IComparer<TKey>OrderedEnumerable 内部使用对项目进行排序。当你这样做时:

var items = myList.OrderBy(i => i.SomeProperty);

OrderedEnumerable type 正在创建一个 IComparer<TKey>在内部。在上面的例子中,如果i.SomePropertyString它会创建一个 IComparer<String> 的实例然后使用 SomeProperty 上的比较器对可枚举源中的项目进行排序成员(member)。

在你的最后一个案例中:

list<string> mylist = customers.GetPropertyValues(cus=>cus.Fullname);

您可以使用 Select 执行此操作:

var names = customers.Select(c => c.Fullname);

这将返回 String 的可枚举值名字。在Select方法,Func<TSource, TResult>用于选择要添加到结果中的目标元素。

要自己复制这个,你可以这样做:

public static IEnumerable<TMember> GetPropertyValues<TSource, TMember>
(this IEnumerable<TSource> enumerable, Func<TSource, TMember> selector)
{
if (enumerable == null)
throw new ArgumentNullException("enumerable");

foreach (TSource item in enumerable)
{
yield return selector(item);
}
}

关于c# - 谓词和 OrderBy , Func,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3403615/

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