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

2024-05-22

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

我正在致力于重构Deck延长List<Card>,而不是有List<Card> Cards作为财产。然而,虽然Cards.OrderBy (a => Guid.NewGuid ())工作过,OrderBy (a => Guid.NewGuid ())才不是:

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

为什么这不起作用?


Add this到前面OrderBy as in

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

OrderBy是一个扩展方法IEnumerable<T>并且不是公共方法List<T>。如果您输入OrderBy如果没有上下文,编译器将查找名为的实例或静态方法OrderBy。仅当您添加前缀时OrderBy与一个实例IEnumerable<T>编译器会发现OrderBy. As Deck : List<Card> and List<Card> : IEnumerable<Card>,使用关键字this(对当前实例的引用)将为编译器提供定位该方法所需的上下文Enumerable.OrderBy.

已经被考虑了继承的不良做法List<T>在公共 API 中 http://blogs.msdn.com/kcwalina/archive/2005/09/26/474010.aspx。第一的,List<T>不是为继承而设计的,可能应该是sealed;现在为时已晚。一般来说,在使用框架类时,您应该更倾向于组合而不是继承。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我不能在扩展 List 的类中调用 OrderBy? 的相关文章