如果任何属性的值不同,如何比较?

时间:2019-07-03 18:21:39

标签: c#

我上课

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;
   }

}

1 个答案:

答案 0 :(得分:1)

您的实现存在一些问题:

  1.   

    if (Prop1 == Prop2) { return true; }

    这意味着如果Prop1等于Prop2 且没有其他重要内容

  2. >
  3.   

    if (Prop2 == Prop1)

    这与上面的完全相同,因此是多余的。检查Prop1是否等于Prop2与检查Prop2是否等于Prop1相同;有意义吗?

  4. 该方法永远不会返回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;
}