我有一个树形类Foo,其接口为IFoo。
我希望Foo能够在T : IEquatable时实现IEquatable>,(或者更一般地,如果T : I,我可能还想要Foo : I>以及其他已实现的接口)。
我尝试了以下伪代码:
我希望Foo能够在T : IEquatable时实现IEquatable>,(或者更一般地,如果T : I,我可能还想要Foo : I>以及其他已实现的接口)。
我尝试了以下伪代码:
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
(我还覆盖了通用的Equals等)。
但是FooTwo<T>
现在没有实现IEnumerable<IFooTwo<T>>
(而是实现了IEnumerable<IFoo<T>>
)。
所以我有两个问题:
- 有没有更好的方法来组织我的代码,以便实现我的目标(如果
T : IEquatable<T>
,我想能够为Foo<T>
实现IEquatable<Foo<T>>
)?一种类似于条件where
的方式。 - 如何以快速简便的方式使
FooTwo<T>
实现IEnumerable <FooTwo<T>>
,并使用Foo<T> IEnumerable
实现?
编辑:
在特殊情况下的IEquatable<Foo<T>>
,我对问题1有一个简单的答案。我可以测试T:IEquatable<T>
,并根据需要更改IEquatable<Foo<T>>
的实现。但我仍然想知道如何在更一般的情况下做到这一点。
IEnumerable<Foo<T>>
而不是IEnumerable<IFoo<T>>
? - Lasse V. Karlsen