2010-12-23 35 views
0

我很确定这是一个基本问题,但由于某种原因,我无法在Google上找到它,所以我会在这里问一下。通过比较一个CustomType ==

我有一个MoneyType对象,其中包含一个int(在美分值)和十进制(只是正常的值)

这种类型的继承IComperable界面,可以比的,现在我比较If语句中的两个MoneyType:

if (invoice.GrossAmount == invoice.NetAmount) 
{ 
//Something 
} 

现在我应该重写什么方法或应该继承哪个接口才能使其工作?由于这样做不会输入CompareTo()方法,它也不会输入.Equals方法,所以我不知所措。

+0

没有,只是IComparable的下面,正常。尝试通用版本(我不知道存在)现在。编辑:没有骰子:( – 2010-12-23 09:10:59

回答

5

如果您执行IComparable,那么执行CompareTo方法。在此基础上实现中,测试两个量相等如下执行:

if (invoice.GrossAmount.CompareTo(invoice.NetAmount) == 0)//the $ame amount of money 
{..} 

直接与比较“==”指过载“==”操作符所描述here。这是添加下面的方法MoneyType类中:

public static bool operator ==(MoneyType x, MoneyType y) 
{ 
     return x.CompareTo(y.NetAmount) == 0;//make use of the working IComparable implementation 
} 

您必须实现“=!”了。您还应该实现Equals方法(只需调用==运算符)和GetHashCode

HTH, 卢西恩

+0

你是对的,有一点我很想知道,如果你做一个> =比较它使用CompareTo还是我需要在那里定义运算符以及检查自己,还需要覆盖其他运算符如果我想使用>和<。Gues重写只有CompareTo方法允许IList。排序()功能 – 2010-12-23 09:18:24

2

必须要么重写==!=运营商。

public static bool operator ==(Invoice left, Invoice right) 
{ 
    return Equals(left, right); 
} 

public static bool operator !=(Invoice left, Invoice right) 
{ 
    return !Equals(left, right); 
} 

实施IComaprable中的* 排序 *荷兰国际集团该类型的对象的列表,* 订购 *荷兰国际集团他们不要平等的情况下完成的。

3

MSDN:

默认情况下,操作者==通过确定是否 两个引用供参考 相等测试指示 相同的对象。

要改变这个,你必须重载==和!=运算符。您可以看看here以获取MSDN上的完整说明和示例。

0

您可以使用if (invoice.GrossAmount.Equals(invoice.NetAmount)),这是完全可以接受的。

1

尝试,包括在MoneyType类

 public static bool operator ==(MoneyType a, MoneyType b) 
     { 
      return a.cents == b.cents; 
     } 

     public static bool operator !=(MoneyType a, MoneyType b) 
     { 
      return a.cents != b.cents; 
     }