字符串比较或解析到Int?

时间:2014-04-03 16:58:10

标签: c# string comparison

我会保持这一点。我正在编写一个模块,需要比较输入为字符串的两个大整数(注意:它们很大,但不足以超过Int64边界)。

字符串是填充的,所以选择是采取额外步骤将它们转换为等价的整数或将它们作为字符串进行比较。

我正在做的是将每个转换为Int64并以这种方式进行比较。但是,我相信字符串比较也会起作用。看到我希望它尽可能高效,你对整数比较的看法是什么:

string integer1 = "123";
string integer2 = "456";

if (Int64.Parse(integer1) <= Int64.Parse(integer2))

OR

string integer1 = "123";
string integer2 = "456";

if (integer1.CompareTo(integer2) < 0)

3 个答案:

答案 0 :(得分:2)

Nope字符串比较不起作用。您应该使用您的第一个版本,您必须将此字符串转换为解析它们的数字,然后比较这些数字。

最好看看here,其中解释了CompareTo方法的作用。用几句话说:

  

当前实例与另一个相同类型的对象进行比较,并返回一个整数,该整数指示当前实例是否在排序顺序中与其他对象相同,位于或出现在同一位置。

因此&#34; 123&#34;和&#34; 456&#34;是字符串,它们将一个字符串与另一个字符串进行比较,而不是一个整数与另一个字符串。

最后但并非最不重要的是,最好使用TryParse方法解析数字,因为输入可能不是意外的整数。你使用它的方式相当简单:

Int64 value = 0;
Int64.Parse(integer1, out value1);

如果value1是值1,您将在转换字符串integer1后得到。因此,对于这两个值,您应该使用这一个if语句:

if(Int64.TryParse(integer1, out value1) && Int64.TryParse(integer2, out value2)
{
    if(value1<=value2)
    {

    }
    else
    {

    }
}
else
{
    // Some error would have been happened to at least one of the two conversions.
}

答案 1 :(得分:2)

最好使用Int64.TryParse,因为这是一个字符串字段

string integer1 = "123";
string integer2 = "456";

long value1=0;
long value2=0;

long.TryParse(integer1 ,out value1); 
long.TryParse(integer2 ,out value2);

if(value1<=value2)

答案 2 :(得分:0)

公平地质疑是否值得转换成本(解析)。如果String.CompareTo非常有效并且数字始终是一个比例和格式*字符串比较是可靠的那么你可能会更好。你可以测量性能,但是你会发现转换和int比较比字符串比较更快更强大。

*如果数字字符串长度相等而且前导0必要,则字符串比较有效。所以&#39; 003&#39;&#39; 020&#39;和&#39; 100&#39;将正确排序,但&#39; 3&#39;,&#39; 20&#39;和&#39; 100&#39;不会。