【发布时间】:2017-07-19 12:38:03
【问题描述】:
问题:C# .NET 中字典类的行为差异
说明:在下面给出的代码 sn-p 中,在 .NET 3.5 版本中,如果字典中不存在该值,我们在 iOutValue 变量中得到 -1。但是在 .NET 4.5 中,如果字典中不存在该值,我们会在 iOutValue 变量中得到 0。
代码片段:
Dictionary<Int32, Int32> dicobj = new Dictionary<Int32, Int32>;
Int32 iOutValue = -1;
dicobj.TryGetValue(0, out iOutValue);
Console.WriteLine("Out Value : " + iOutValue);
使用两个不同版本的 .Net 框架执行相同的代码 sn-p。 iOutValue 中的值在两个版本中是不同的。这怎么可能?
【问题讨论】:
-
不,您永远不会将
iOutValue视为 -1。如果密钥不存在,Dictionary<,>.TryGetValue总是 将 out 参数设置为默认值TValue。很难说您为什么认为 .NET 3.5 中的情况并非如此,但我绝对相信您错了。 -
还有记载:msdn.microsoft.com/en-us/library/bb347013(v=vs.90).aspx"否则,value参数的类型的默认值"任何数值类型的默认值都是0。
-
另见:out parameter modifier -- “被调用的方法需要在方法返回之前赋值。” ——它绝不能只是“让它保持以前的样子”。 必须分配“某物”。在这种情况下:
default(int). -
谢谢,这些信息很有帮助
标签: c# .net dictionary