如何比较任何属性是不同的值



我有一个类

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

您的实现存在一些问题:

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

    这意味着如果Prop1等于Prop2 ,该方法将返回true,而没有其他重要的内容很重要

  2. if (Prop2 == Prop1)

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

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

相关内容

最新更新