我有一个类
public class myObject
{
public decimal Prop1 {get;set;}
public decimal Prop2 {get;set;}
public decimal Prop3 {get;set;}
}
如何比较Porp1,prop2或prop3是否具有不同的值?
var obj1 = new myObject();
obj1.Prop1 = 1;
obj1.Prop2 = 1;
obj1.Prop3 = 1;
我的obj1具有所有等于属性
我的隐含:
public bool Test()
{
if(Prop1 == Prop2)
{
return true;
}
if(Prop1 == Prop3)
{
return true;
}
if(Prop2 == Prop1)
{
return true;
}
if(Prop2 == Prop3)
{
return true;
}
}
您的实现存在一些问题:
-
if (Prop1 == Prop2) { return true; }
这意味着如果
Prop1
等于Prop2
,该方法将返回true,而没有其他重要的内容很重要。 -
if (Prop2 == Prop1)
这与上面的完全相同,因此是多余的。检查
Prop1
是否等于Prop2
与检查Prop2
是否等于Prop1
;这有意义吗? -
该方法不会返回
false
,永远不会返回!它实际上并不是在所有代码路径中返回,因此甚至不会编译。
在解决任何编程问题时,您应该问自己如何在现实生活中解决它(或者手动执行(。
那么,您怎么知道三个对象是平等的(在您的脑海中(?您基本上将两个对象比较,然后将第三个对象与其中的任何一个进行比较。因此,在我们的示例中,您会以某种方式认为:
Prop2
是否相等的Prop1
相同?好的,和Prop3
也等于Prop1
吗?如果是这样,那三个是相同的。
现在,我们如何在代码中写这件?在C#中,逻辑和操作员是&&
,我们用来将两个条件结合在一起。因此,我们写下这样的东西:
if (Prop1 == Prop2 && Prop2 == Prop3) { /* All three are equal */ }
或:
if (Prop1 == Prop2 && Prop1 == Prop3) { /* All three are equal */ }
完整示例:
public class myObject
{
public decimal Prop1 {get;set;}
public decimal Prop2 {get;set;}
public decimal Prop3 {get;set;}
public bool AreTheyEqual()
{
if (Prop1 == Prop2 && Prop2 == Prop3)
{
return true;
}
else
{
return false;
}
}
}
测试:
public static void Main(string[] args)
{
var obj1 = new myObject();
obj1.Prop1 = 1;
obj1.Prop2 = 1;
obj1.Prop3 = 1;
Console.WriteLine(obj1.AreTheyEqual()); // True;
obj1.Prop3 = 5;
Console.WriteLine(obj1.AreTheyEqual()); // False;
}