如何在C#中定义泛型T实现IComparable<T>且继承IEnumerable<T>的接口?
Java LinkedList接口的C#等价实现
你之前的写法错误在于把接口继承和泛型参数约束搞混了。
Java代码interface LinkedList<T extends Comparable<T>> extends Iterable<T>包含两层核心逻辑:
- 泛型参数
T必须实现Comparable<T>(对应C#的IComparable<T>) LinkedList这个接口本身要继承Iterable<T>(对应C#的IEnumerable<T>)
而你写的where T : IComparable<T>, IEnumerable<T>,是要求泛型T同时实现IComparable<T>和IEnumerable<T>,这完全偏离了原Java代码的意图。
正确的C#写法应该把接口继承放在接口定义后面,泛型约束放在where子句里:
public interface LinkedList<T> : IEnumerable<T> where T : IComparable<T>
这样就完美对应了原Java代码的逻辑:LinkedList<T>接口本身支持迭代(实现IEnumerable<T>),同时要求泛型参数T必须具备比较能力(实现IComparable<T>)。
内容的提问来源于stack exchange,提问作者Hubert
相关产品推荐
相关产品推荐

