我上课
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具有所有equals属性
我的实现:
public bool Test()
{
if(Prop1 == Prop2)
{
return true;
}
if(Prop1 == Prop3)
{
return true;
}
if(Prop2 == Prop1)
{
return true;
}
if(Prop2 == Prop3)
{
return true;
}
}
答案 0 :(得分:1)
您的实现存在一些问题:
if (Prop1 == Prop2) { return true; }
这意味着如果Prop1
等于Prop2
且没有其他重要内容 。
if (Prop2 == Prop1)
这与上面的完全相同,因此是多余的。检查Prop1
是否等于Prop2
与检查Prop2
是否等于Prop1
相同;有意义吗?
该方法永远不会返回false
!它实际上不会返回in all code paths,因此甚至不会编译。
在处理任何编程问题时,您应该问自己如何在现实生活中解决它(或者是否手动完成)。
那么,您如何知道三个对象相等(在您的脑海中)?您基本上将两个对象进行比较,然后将第三个对象与其中任何一个进行比较。因此,在我们的示例中,您可能会这样想:
Prop2
是否等于Prop1
?好的, 和Prop3
也等于Prop1
吗?如果是这样,那么这三个是相同的。
现在,我们该如何用代码编写?在C#中,逻辑AND运算符是&&
,我们使用它将两个条件组合在一起。所以,我们这样写:
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;
}