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_不信者是的,类型继承会让这成为一场噩梦。我的概念可能完全有缺陷。