2013-04-25 46 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