int CompareTo方法和普通If条件之间的区别?

时间:2013-12-14 11:52:55

标签: c# asp.net performance comparison

我已尝试使用两种类型

对两个整数值进行比较

类型1:

 int val1 = 1;
 int val2 = 2;

var returnValue = val1.CompareTo(val2);//-1 for First int is smaller.
varreturnValue = val2.CompareTo(val1);// 1 for First int is larger
varreturnValue = val1.CompareTo(val1);//0 for Ints are equal.

If(varreturnValue ==1)
 {
    //Success
 }
 else
 {
   //Failure 
 }

类型2:

 int val1 = 1;
 int val2 = 2;

if (val1 < val2)
{
    //return -1 //Failure
}
else if (val2 < val1)
{
    //return 2 //Success 
}
else
{
    // return 0  // Same 
}
  • 这些方法有什么区别?

    • 哪一个(类型)更适合标准编码..?

    • 各种类型的表现有何不同?

2 个答案:

答案 0 :(得分:2)

当我看一下int CompareTo()方法的内部(使用ReSharper)时,我看到了这一点:

public int CompareTo(int value)
{
  if (this < value)
    return -1;
  return this > value ? 1 : 0;
}

因此,无论如何,无论如何,似乎CompareTo()函数正在执行您的第二个示例。

如果我们删除三元运算符,它看起来与您的示例相同:

public int CompareTo(int value)
{
  if (this < value)
    return -1;

  if (this > value)
    return -1;

  return 0;
}

答案 1 :(得分:1)

在我看来,CompareTo方法很好,以防你需要 分开 检查相等性的逻辑和另一个使用结果的逻辑比较。在您的示例中,当您执行以下代码时:

int val1 = 1;
 int val2 = 2;

if (val1 < val2)
{
    //return -1 //Failure
}
else if (val2 < val1)
{
    //return 2 //Success 
}
else
{
    // return 0  // Same 
}

您不能 返回 比较结果 的其他功能。这是从msdn:

中提取的代码
enum Comparison {
   LessThan=-1, Equal=0, GreaterThan=1};

public class ValueComparison
{
   public static void Main()
   {
      int mainValue = 16325;
      int zeroValue = 0;
      int negativeValue = -1934;
      int positiveValue = 903624;
      int sameValue = 16325;

      Console.WriteLine("Comparing {0} and {1}: {2} ({3}).",  
                        mainValue, zeroValue, 
                        mainValue.CompareTo(zeroValue), 
                        (Comparison) mainValue.CompareTo(zeroValue));
    }
}

在这种情况下,比较结果表示为枚举,可以在函数之间 传递

另一种情况是你甚至可以 序列化 通过网络将比较结果作为数值(-1,0,1)(ajax调用的返回值,例如)

像这样的数字比较可能没什么关系,但PatrykĆwiek在评论中指出。可以通过界面使用CompareTo,其他数据类型(包括您的自定义类型)可以 实现