为什么我们需要太多执行相同功能的方法?

San*_*eep 3 c#

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主要是说"是的,我可以转换为整数 - 这就是如何".

  • 为了完整起见,TryParse比Int32.Parse中的try/catch更快.如果您正在进行大量可能失败的解析,使用TryParse可能会为您的应用带来巨大的性能提升. (2认同)