如果我运行这个C#代码
int realInt = 3;
string foo = "bar";
Int32.TryParse(foo, out realInt);
Console.WriteLine(realInt);
Console.Read();
Run Code Online (Sandbox Code Playgroud)
我得到0.我想知道为什么!因为我找不到任何理由.这迫使我为每次解析创建临时变量.所以,请!伟大的宇宙编码器,赐教我!
Mar*_*ell 33
它是"out",而不是"ref".在方法内部,它必须分配它(不先读取它)以满足"out"的含义.
实际上,"out"是一种语言问题(不是框架问题) - 因此托管C++实现可能会忽略这一点......但是遵循它更加一致.
事实上; 如果方法返回false,你就不应该查看该值; 在下次分配之前将其视为垃圾.声明返回0,但这很少有用.
另外 - 如果它没有这样做(即如果它保留了值); 会打印什么:
int i;
int.TryParse("gibber", out i);
Console.WriteLine(i);
Run Code Online (Sandbox Code Playgroud)
这是完全有效的C#...所以它打印什么?
Int32.TryParse方法(String,Int32)doc说:
将数字的字符串表示形式转换为其等效的32位有符号整数.返回值表示转换是否成功.
结果
键入:System.Int32
当此方法返回时,如果转换成功,则包含等效于s中包含的数字的32位有符号整数值,如果转换失败,则包含零.如果s参数为空引用(在Visual Basic中为Nothing),格式不正确,或者表示小于MinValue或大于MaxValue的数字,则转换失败.此参数未初始化传递.