Mat*_*hew 2 .net c# linq inheritance extension-methods
我有一个类,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)
为什么这不起作用?
添加this到前面OrderBy,如
this.OrderBy(a => Guid.NewGuid()); // a random ordering
Run Code Online (Sandbox Code Playgroud)
OrderBy是一个扩展方法,IEnumerable<T>而不是一个公共方法List<T>.如果OrderBy在没有上下文的情况下键入,编译器将查找名为的实例或静态方法OrderBy.只有前缀为编译器找到OrderBy的IEnumerable<T>will 实例的前缀OrderBy.作为Deck : List<Card>和List<Card> : IEnumerable<Card>,使用关键字this(对当前实例的引用)将为编译器提供定位方法所需的上下文Enumerable.OrderBy.
在公共API中继承List<T>被认为是不好的做法.首先,List<T>它不是为继承而设计的,可能应该是sealed; 现在为时已晚.通常,在使用框架类时,应该优先考虑组合而不是继承.
| 归档时间: |
|
| 查看次数: |
3871 次 |
| 最近记录: |