2014-03-28 239 views
2

我正在将一些代码从C++转换为C#,并且有一个函数wtol需要一个字符串输入并输出一个整数。具体来说,它需要版本字符串6.4.0.1并将其转换为4.我如何在C#中执行此操作?我试过convert.toInt32,但惨败了。wtol相当于#

+0

那么你想从'6.4.0.1'输出为'4'还是'6','4','0'和'1'? –

+0

'Version.Parse'分析版本字符串。那是你需要的吗? http://msdn.microsoft.com/en-us/library/system.version.parse.aspx –

+0

是的,wtol与宽字符串的atol相同 –

回答

4

你可以使用(需要.NET 4.0或更高版本)

Version.Parse("6.4.0.1").Minor 

这将前期工作.NET 4.0

new Version("6.4.0.1").Minor 
+0

哦,这很顺利。 – Haney

+0

让我检查一下。我喜欢一行东西;) –

+1

正确的答案 - 代码也是不言自明的,这使得它更好。 – Baldrick

4

试试这个(假设你具有第一和第二点之间的数字):

string myString = "6.4.0.1"; 

int myInt = Convert.ToInt32(myString.Split('.')[1]); 

位更安全的方法将(假设在字符串中的至少一个点):

int myInt = 0; 
int.TryParse(myString.Split('.')[1], out myInt); 

最安全方法将是:

int myInt = 0; 
string[] arr = myString.Split('.'); 

if(arr.Length > 1 && int.TryParse(arr[1], out myInt)) 
{ 
    //myInt will have the correct number here. 
} 
else 
{ 
    //not available or not a number 
} 
+0

您应该使用'int.Parse' - 更快,更高效。 – Haney

+0

这并不安全:当分割结果<= 1的元素时,它会抛出一个'IndexOutOfBoundsException' – Haney

+0

@DavidHaney:我假设字符串中至少有一个点。 – Kaf

3

使用此假设您将始终有一个格式是XXXX

var test = "6.4.0.1"; 
var parts = test.Split(new[] { '.' }, StringSplitOptions.RemoveEmptyEntries); 
int result = int.Parse(parts[1]); 
0

我会建议使用TryParse,而不是仅仅Parse,以防你从一个不受信任的来源获取版本号。

var versionString = "6.4.0.1"; 
Version version; 
if (Version.TryParse(versionString, out version)) 
{ 
    // Here you get your 4 
    Debug.WriteLine("The version Integer is " + version.Minor); 
} 
else 
{ 
    // Here you should do your error handling 
    Debug.WriteLine("Invalid version string!"); 
}