我有一堂课,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(使用前将#替换为@)