在 C# 中将字符串转换为 int(当 String 为 'E0305' 时,转换 Int 是行不通的)

Convert string to int in C# (When String is 'E0305' To convert Int is not Work)

我想将 string 转换为 int,但有时无法正常工作。

这是我的代码:

public static int ToInt(String pStr)
{
     return Convert.ToInt32(Microsoft.VisualBasic.Conversion.Val(pStr));
}

Int i = ToInt("F0005");

输出为 0 - 工作正常。

但是当我传入这样一个值时

Int i = ToInt("E0305");

然后我收到错误“超出范围的异常”。

我混合了多种值,有些是整数,有些是字符串;我想在循环中传递每个值并将其转换为 int,但是当我传递这个值时我得到一个错误。

您可以在没有 VB.NET 库的情况下单独使用 C# 实现

public static int ToInt(string pStr)
{
     return int.Parse(pstr);
}

请注意,如果 pStr 不是有效的整数字符串,这将引发异常。在您的情况下,如果值太大,它也可能会抛出异常,您可能需要 long 而不是容纳更大的数字。

public static long ToInt64(string pStr)
{
     return long.Parse(pstr);
}

此外,我刚刚注意到您正在尝试解析“E0305”,这不是真正有效的格式(据我所知)。最接近的是“1E305”,意思是 1 后面有 305 个零。如果你需要解析那么大的整数,你可能需要 BigInteger

public static BigInteger ToBigInteger(string pStr)
{
     return BigInteger.Parse(pstr, System.Globalization.NumberStyles.AllowExponent);
}

System.Globalization.NumberStyles.AllowExponent 部分允许解析指数表示中的数字。

尝试使用 int.TryParse() 方法来处理那些你有一些意外并且你不希望在解析它们的过程中出现异常的情况。

它的用例是:

var isValid = int.TryParse(pStr, out int result);

使用它的另一个好处是您拥有 return 值,可以为您提供处理不成功的解析调用的方法。

如果您只想跳过无效的字符串值,最好使用 TryParse 而不是返回 0(这可能是有效值)。在您的调用代码中,它应该如下所示:

string val = "F0005";
if (int.TryParse(val, out int i) {
   // parse success. you can use i here
}
else {
   // parse failed. 
}

如果您真的希望它为 0,这应该可行

string val = "F0005";
int i = int.TryParse(val, out int x) ? x : 0;