2013-04-25 44 views
1

我從具有長類型限定符的第三方SW得到一個字符串,例如, 「1L」。 我想解析這到一個Int64,但Int64.TryParse不認識到這是一個Int64。 是否有.NET方法可以安全地執行此操作?我想避免自己解析....NET方法來解析字符串與長類型限定符

感謝您的幫助!

+1

'與string.replace( 「L」, 「」)'? – I4V 2013-04-25 13:47:43

+0

如果它是1)不是第一個非空白字符,則替換'L'(或'l'); 2)它是最後一個字符或緊跟着一個空格字符。 – 2013-04-25 14:51:05

回答

1

在最簡單的情況下,你可以這樣做:

string sNum = "1L"; 
int pos = sNum.IndexOf('L'); 
if (pos == sNum.Length-1) 
{ 
    sNum = sNum.Substring(0, sNum.Length-1); 
} 
long num = int64.Parse(sNum); 
+0

所以我不太明白這個轉換,但是如果'L'處於第一個位置,Int64.Parse會工作嗎? – 2013-04-25 14:56:12

+0

@MichaelPerrenoud:根據文檔,「Int64.Parse」想要[空格] [符號]數字[空白]'。對於前導或尾隨類型說明符沒有限制。 – 2013-04-25 16:33:29

+0

現在我明白了,所以尾隨類型說明符(例如'L')並不是真正的標準,而只是它來自哪裏的人爲因素。 – 2013-04-25 16:58:34

0

從瀏覽的時候,我可以推薦最好是使用正則表達式要麼提取 或刪除非數字字符,然後解析與框架(轉換,解析或TryParse等)。

我挖走這從下面的問題之一,希望它的工作原理:

var originalString = "9L"; 
var result = Convert.ToInt64(Regex.Replace(originalString, "[^0-9]", String.Empty)); 

看到這些問題的一些例子(有些,呃,......有趣的替代方法):

+0

謝謝,我希望我可以避免字符串操作,但這會起作用。 – user736570 2013-04-25 16:29:48

+1

那麼這會使「93foobar265」變成「93265」?樂趣。 – 2013-04-25 16:34:40

+0

是的吉姆,不是最乾淨,但我能找到最好的。正則表達式可以很容易地改變,只取代L或l(根據您的評論),但OP並不十分清楚alpha字符的限制或可能的位置可能是什麼 – GrahamMc 2013-04-25 19:23:10