我有一个树型的类Foo<T>
与它的接口IFoo<T>
。我有一个类A <T>:IEnumerable <T>,我想添加IEquatable <A<T>>如果T:IEquatable <T>。我该怎么做,并保持IEnumerable呢?
我想Foo<T>
能够实现IEquatable<Foo<T>>
时T : IEquatable<T>
(或者更一般地,如果T : I<T>
我可能会在另外的其他实现的接口要Foo<T> : I<Foo<T>>
)。
我试图伪下面的代码:
public interface IFoo<T> : IEnumerable<IFoo<T>>
...
public class Foo<T> : IFoo<T>
...
public interface IFooTwo<T> : IFoo<T>, IEquatable<IFooTwo<T>>
where T : IEquatable<T>
...
public class FooTwo<T> : IFooTwo<T> {
... // I implement Equals
public bool NewMethod(FooTwo<T> Other) { ... }
}
所以,现在我已成功实施Equals
(我也overrided的geniric平等相待,等等)。
但FooTwo<T>
现在不执行IEnumerable<IFooTwo<T>>
(而是它实现IEnumerable<IFoo<T>>
)。
所以我有两个问题:
- 有没有更好的办法,我来组织我的代码以实现我的目标(如果
T : IEquatable<T>
我希望能够实现IEquatable<Foo<T>>
为Foo<T>
)?一种有条件的where
。 - 如何使用
Foo<T> IEnumerable
快速轻松地实现FooTwo<T>
implementsIEnumerable <FooTwo<T>>
?
编辑:
在IEquatable<Foo<T>>
的特殊情况下,我有疑问1.一个简单的答案我可以测试是否T:IEquatable<T>
并根据需要更改我的执行IEquatable<Foo<T>>
。不过,我仍然想知道如何在更一般的情况下做到这一点。
你如何重新实现'IEnumerable>'而不是'IEnumerable >'? –
你是对的,编辑 –
**请**注意编辑问题时的预览窗格,尤其是当您试图讨论泛型类型参数时。我已经修复了一次你的代码,我没有心情再次为你的修改做这件事(请尝试阅读,因为它目前显示,并看看它有多少意义) –