C# · 12月 29, 2021

c# – 为什么Int32.TryParse在无法转换时重置out参数?

如果我运行这个C#代码 int realInt = 3; string foo = “bar”; Int32.TryParse(foo,out realInt); Console.WriteLine(realInt); Console.Read();

我得到了0.我想知道为什么!因为我找不到任何理由.这迫使我为每个解析创建临时变量.所以,请!伟大的宇宙编者,启发我!

解决方法 它是“出”,而不是“参考”.在方法里面,它必须分配它(不要先阅读它)来满足“out”的含义.

实际上,“out”是一个语言关注(不是一个框架) – 所以一个被管理的C实现可能会忽略这个…但是它更符合它.

事实上;如果方法返回false,你根本不应该看这个值;将其视为垃圾,直到下次分配为止.据说返回0,但这很少有用.

另外 – 如果没有这样做(即如果它保留了值);这将打印什么:

int i;int.TryParse(“gibber”,out i);Console.WriteLine(i);

这是非常有效的C#…所以它打印什么?