string s1 = "1234";
string s2 = "1234.65";
string s3 = null;
string s4 = "123456789123456789123456789123456789123456789";
result = Int32.Parse(s1); //-- 1234
result = Int32.Parse(s2); //-- FormatException
result = Int32.Parse(s3); //-- ArgumentNullException
result = Int32.Parse(s4); //-- OverflowException
result = Convert.ToInt32(s1); //-- 1234
result = Convert.ToInt32(s2); //-- FormatException
result = Convert.ToInt32(s3); //-- 0
result = Convert.ToInt32(s4); //-- OverflowException
success = Int32.TryParse(s1, out result); //-- success => true; result => 1234
success = Int32.TryParse(s2, out result); //-- success => false; result => 0
success = Int32.TryParse(s3, out result); //-- success => false; result => 0
success = Int32.TryParse(s4, out result); //-- success => false; result => 0
Run Code Online (Sandbox Code Playgroud)
当操作的意图是将字符串转换为int时,为什么我们需要这么多转换函数.
如果我的问题很愚蠢,我很抱歉.
Rex*_*x M 13
他们做了3件不同的事:
Int32.Parse()期望一个字符串,它是一个整数的精确表示.它非常有限 - 要么解析字符串要么爆炸.
Int32.TryParse()与Parse相同,但具有执行验证的额外开销.因此,如果您不确定传入的字符串是否可解析,则优于Parse并捕获异常(非常昂贵).但是TryParse,如果你能够非常自信地Parse做一个简单的事情,那就太浪费了.
Convert.ToInt32是最复杂的 - 它实际上确定传入的对象是否可转换为int,而不是可解析的.它支持在许多本机(已知)类型之间进行转换,但也检查传入对象以查看对象是否提供了自己的逻辑,IConvertible主要是说"是的,我可以转换为整数 - 这就是如何".
| 归档时间: |
|
| 查看次数: |
151 次 |
| 最近记录: |