[英]Converting string to int (or something else), is there a prefered way?
有时我想知道,在将字符串转换为其他类型时,例如int32,比另一种更好,或者只是品味问题?
Convert.ToInt32("123")
要么
Int32.Parse("123")
要么
还有其他方法吗?
如果在这个问题中它不是有效的int,则不考虑这种情况。
Convert.ToInt32实际上是通过以下方式实现的......
int.Parse(value, CultureInfo.CurrentCulture);
...除了考虑到文化背景外,它与您声明的替代方案相同。 int.Parse方法本身通过以下方式实现...
Number.ParseInt32(s, NumberStyles.Integer, NumberFormatInfo.GetInstance(provider));
...其中Number是您无法直接调用的内部类。 Number.ParseInt32方法标有以下属性...
[MethodImpl(MethodImplOptions.InternalCall)]
...显示它是在CLR本身内部实现的。
Conver.ToInt32
和Int32.Parse
之间的主要区别在于如何处理null
字符串。 在这种情况下, Convert.ToInt32
返回默认值:
public static int ToInt32(string value)
{
if (value == null)
return 0;
return Int32.Parse(value, CultureInfo.CurrentCulture);
}
我不喜欢那样。 我认为只应将"0"
解析为0
。 此行为最初是为Visual Basic程序员设计的 :
这是一组程序员从Visual Basic 6迁移到Visual Basic .NET的转换方法,它们反映了现有Visual Basic 6转换方法的行为。 假设C#程序员更适合使用转换操作符,而Visual Basic传统上使用转换方法进行类型转换。
所以,作为非VB程序员,我会选择Int32.Parse
和Int32.TryParse
。
当从string转换为int时,我总是使用int.TryParse。 因为您并不总是确定可以将字符串转换为int。 像这样:
string temp="222";
int intValue;
if(int.TryParse(temp,out intValue))
{
//Something
}
正如V4Vendetta建议的那样,最好使用TryParse来避免与转换相关的异常。
int result = 0;
a = "3";
string b = "b";
string c = "2147483648"; //int32 max value + 1
int.TryParse(a, out result); // returns true result=3
int.TryParse(b, out result); // returns false result=0
int.TryParse(c, out result); // returns false result=0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.