C#-是否有方法将两个类型参数约束为必然不同?

C#-是否有方法将两个类型参数约束为必然不同?,c#,class,types,type-constraints,C#,Class,Types,Type Constraints,我正在构建一个MyClass:IEnumerable类,但要使它在我的应用程序上下文中有任何意义,我需要确保T1!=T2 有没有合适的方法来约束T1和T2,使它们不是相同的类型?如果您知道它们应该是什么类型,可以使用类型约束: class MyClass<T1, T2> : IEnumerable<Tuple<T1, T2>> where T1 : MyClass1 where T2 : MyClass2 如果知道它们应该是什么类型,可以使用

我正在构建一个
MyClass:IEnumerable
类,但要使它在我的应用程序上下文中有任何意义,我需要确保
T1!=T2


有没有合适的方法来约束
T1
T2
,使它们不是相同的类型?

如果您知道它们应该是什么类型,可以使用类型约束:

class MyClass<T1, T2> : IEnumerable<Tuple<T1, T2>>
    where T1 : MyClass1
    where T2 : MyClass2

如果知道它们应该是什么类型,可以使用类型约束:

class MyClass<T1, T2> : IEnumerable<Tuple<T1, T2>>
    where T1 : MyClass1
    where T2 : MyClass2

不,考虑在构造函数中抛出一个异常,如果真的非常必要的话,如果它们碰巧是同一个类型,那么会发生什么灾难性的错误呢?我可以想象各种可能发生的毫无意义的活动(但如果消费者选择这样做,那是消费者的责任),但我无法想象任何会导致实际问题的场景。甚至在考虑是否要排除继承链之前。也就是说,如果
T1
是从
T2
派生出来的,您是否也试图排除这种可能性?因为默认情况下,未密封的类会指向一个明显的方法来规避这个约束,如果消费者选择这样做的话。@Damien_不相信我的人,我正试图尽我所能去做一种符合人体工程学的感觉,为了做到这一点,我让它
myBiDic[T1 myKey]
返回与其相关的
T2
值和
myBiDic[T2 myKey]
返回与之关联的
T1
值。如果
T1
T2
是相同的
myBiDic[myKey]
将是不明确的,因为程序无法知道从哪个方向映射值。我知道我可以简单地做一些事情,
myBiDic.Fowards[myKey]
,但正如我所说的,我正在尽我所能做到符合人体工程学…@Damien_不信者是的,类型继承会让这成为一场噩梦。我的观念可能完全有缺陷。考虑在构造函数中抛出一个异常,如果真的非常必要的话,如果它们碰巧是同一类型,那么会发生什么灾难性的错误呢?我可以想象各种可能发生的毫无意义的活动(但如果消费者选择这样做,那是消费者的责任),但我无法想象任何会导致实际问题的场景。甚至在考虑是否要排除继承链之前。也就是说,如果
T1
是从
T2
派生出来的,您是否也试图排除这种可能性?因为默认情况下,未密封的类会指向一个明显的方法来规避这个约束,如果消费者选择这样做的话。@Damien_不相信我的人,我正试图尽我所能去做一种符合人体工程学的感觉,为了做到这一点,我让它
myBiDic[T1 myKey]
返回与其相关的
T2
值和
myBiDic[T2 myKey]
返回与之关联的
T1
值。如果
T1
T2
是相同的
myBiDic[myKey]
将是不明确的,因为程序无法知道从哪个方向映射值。我知道我可以简单地做一些事情,
myBiDic.Fowards[myKey]
,但正如我所说的,我正在尽我所能做到符合人体工程学…@Damien_不信者是的,类型继承会让这成为一场噩梦。我的概念可能完全有缺陷。