【问题标题】:iOutValue of Dictionary Class in C#.NetC#.Net 中字典类的 iOutValue
【发布时间】: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&lt;,&gt;.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


【解决方案1】:

仔细检查两个版本的代码。

在调用TryGetValue 之前对象的值是什么并不重要。它可以是TValue,也可以是TValue 的默认值。 Int 变为 0,对象变为 null,等等。

也许真的有一个值为 -1 的键 0?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-30
    • 1970-01-01
    • 2020-02-19
    相关资源
    最近更新 更多