2014-03-28 287 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!"); 
}