gpt4 book ai didi

c# - 为什么我不能在扩展 List 的类中调用 OrderBy?

转载 作者:行者123 更新时间:2023-11-30 19:08:02 25 4
gpt4 key购买 nike

我有课,Deck ,其中包含一个名为 Shuffle 的方法.

我正在重构 Deck扩展List<Card> , 而不是 List<Card> Cards作为属性(property)。然而,虽然 Cards.OrderBy (a => Guid.NewGuid ())工作了,OrderBy (a => Guid.NewGuid ())不:

Error CS0103: The name 'OrderBy' does not exist in the current context (CS0103)

为什么这不起作用?

最佳答案

添加thisOrderBy的前面如

this.OrderBy(a => Guid.NewGuid()); // a random ordering

OrderByIEnumerable<T> 上的扩展方法并且不是 List<T> 上的公共(public)方法.如果您键入 OrderBy在没有上下文的情况下,编译器将查找名为 OrderBy 的实例或静态方法.仅当您前缀 OrderBy使用 IEnumerable<T> 的实例编译器会找到 OrderBy .作为Deck : List<Card>List<Card> : IEnumerable<Card> ,使用关键字 this (对当前实例的引用)将为编译器提供定位方法所需的上下文 Enumerable.OrderBy .

被认为是bad practice to inherit from List<T> in a public API .一、List<T>不是为继承而设计的,可能应该是sealed ;现在为时已晚。通常,在使用框架类时,您应该更倾向于组合而不是继承。

关于c# - 为什么我不能在扩展 List 的类中调用 OrderBy?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2144034/

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