4

我有两个字符串

 string A = "1.0.0.0";
 string B = "1.0.0.1";

我需要以某种方式评估 B 是否大于 A (版本方面)或者将这两个字符串转换为整数或小数或其他东西。

我尝试了以下

Decimal S = Convert.ToDecimal(A);
int S = Convert.ToInt32(A);

但不断收到以下错误,“输入字符串的格式不正确。”

任何帮助将不胜感激。

4

6 回答 6

20

请参阅版本类

你可以做这样的事情:

Version a = new Version("1.0.0.0");
Version b = new Version("1.0.0.1");

if (b>a) //evaluates to true
    blah blah blah

我没有亲自测试过这个确切的场景,但是这个Version类允许你使用我在这里展示的比较运算符。

于 2013-03-21T20:32:36.553 回答
3

如果您的字符串最多有 4 个数字部分(由 分隔.),您可以使用Version该类来获取与这些字符串对应的强类型实体。Version以预期的方式实现不同的比较运算符(==,><...),因此您可以找出哪个更大:

var a = new Version(A);
var b = new Version(B);

if(a > b)
  // a is larger
else if (a < b)
  // b is larger
else
  // they are identical

如果有超过 4 个部分,则需要将每个字符串拆分为其数字组件,将每个部分转换为等效的数字并比较两个结果集合。

就像是:

var aParts = A.Split('.');
var bParts = B.Split('.');

// assumes the string have the same number of parts
for(int i = 0; i < aParts.Length; i++)
{
  var currA = int.Parse(aParts[i]);
  var currB = int.Parse(bParts[i]);

  if(currA == currB)
    continue;

  if(currA > currB)
    // A is greater than B      
  else
    // B is greater than A
}
于 2013-03-21T20:31:59.583 回答
3

你可以看看System.Version类。如果字符串是这种格式或者可以转换成一个版本。

版本有比较器

于 2013-03-21T20:32:27.077 回答
1

如果要比较 .NET 中的版本字符串,则可以使用Version类。

Version version = new Version("1.0.0.0");
Version otherVersion = new Version(""1.0.0.1");

该类提供运算符来检查版本是否大于或小于另一个版本。

于 2013-03-21T20:32:31.290 回答
1

在“。”上拆分。然后将每个部分转换为 int。从左开始:如果A的fragment较低,则报告A在前。如果 B 的片段较低,则报告 B 是第一个。否则,移动到下一个片段。如果您已经在最后一个片段中,请报告它们是相等的。

如果您的字符串最多有四个部分(如版本号),那么正如其他人所建议的那样,使用System.Version类会更容易。

于 2013-03-21T20:32:35.593 回答
-2

代替使用 VersionClass 的快速方法将是这样的。

string A = "1.0.0.0";
string B = "1.0.0.1";

int versionA = Convert.ToInt32(A.Replace(".", string.Empty));
int versionB = Convert.ToInt32(B.Replace(".", string.Empty));

if (b>a)
//something will happen here

在这种情况下,替换将第一个字符串更改为第二个字符串。空等于“”。

于 2013-04-30T18:39:49.387 回答