what are you using? whidbey? tryclass Set<T> where T : IComparable
{...
if (x.CompareTo(A[i]) == 0)see
http://msdn.microsoft.com/msdnmag/issues/03/10/NET/default.aspx
{...
if (x.CompareTo(A[i]) == 0)see
http://msdn.microsoft.com/msdnmag/issues/03/10/NET/default.aspx
{
...
}然后把if (x == A[i])改为 if ( x.CompareTo(A[i]) )然而这样有一个限制就是,没有实现IComparable接口的类,将不能实例化Set<T>类型。
所以最佳的做法是,改变判断的语法:
if (x ==A[i])
改为:
if (object.Equals(x, A[i]))
就行了。
用Object.Equals还是有问题啊,Object.Equals默认的是对引用进行判等,所以要想得到楼主的效果的话,T还是要重写Equals方法,然后调用T.Equals。
另外,实现IComparable的类要求重写Equals方法~~~~~~
除非设计者有问题,凡是实现了IComparable的类应该重写了Equals的.
相反的,像我这样的懒人,重写了Equals的时候不一定会实现IComparable的.
搂主这个集合,明显是希望任何对象都能放入,包括IntPtr甚至Exception的实例。而IComparable表示的可比较大小的类型,放入集合并不需要比较大小对不对。我的意思是说约束一定要按照设计的需要进行,没有对IComparable的需要就不要用这个约束。
其实Object.Equals对引用类型来讲都是进行引用等值判断的,这对于Set的工作来说也没什么不正确的,对不对。有时候重写了Equals反而会导致不可预期的效果呢。
[C#]
public class Test<T> where T : System.ValueType[VB]
Public Class Test(Of T As ValueType)都是不行的。哎,本来我期望可以进行一些有意义的设计的。