gpt4 book ai didi

c# - 在LINQ扩展方法中指定通用类型的原因

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

出于好奇:

许多LINQ扩展方法以通用和非通用变体形式存在,例如AnyAny<>WhereWhere<>等。编写查询时,我通常使用非通用变体,并且可以正常工作。

当必须使用通用方法时会怎样?

-编辑-

附注:我知道以下事实:内部仅调用通用方法,并且编译器会在编译期间尝试解析通用括号<>的内容。
我的问题是,在什么情况下必须显式提供类型而不依赖编译器的直觉?

最佳答案

我今天遇到的一个例子:

ObjectSet<User> users = context.Users;
var usersThatMatch = criteria.Aggregate(users, (u, c) => u.Where(c));


上面的代码不起作用,因为.Where方法不返回 ObjectSet<User>。您可以通过以下两种方法之一来解决。我可以在用户上调用 .AsQueryable(),以确保将其强类型化为IQueryable,或者可以将特定的类型参数传递给Aggregate方法:

criteria.Aggregate<Func<User, bool>, IEnumerable<User>>(
PersonSet, (u, c) => u.Where(c));


另外两个更常见的示例是 CastOfType方法,它们无法推断所需的类型,并且在许多情况下,首先是在非通用集合上调用它们。

通常,设计LINQ方法的人们会竭尽所能避免在这些通用方法中使用显式类型的需求,并且在大多数情况下您不需要这样做。我会说最好知道这是一个选择,但是除非您认为有必要,否则请避免这样做。

关于c# - 在LINQ扩展方法中指定通用类型的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6514601/

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