【问题标题】:How to set key null in Dictinoary with `int?` in the key C#? [duplicate]如何在 C# 键中使用“int?”在字典中设置键 null? [复制]
【发布时间】:2019-01-02 13:27:52
【问题描述】:

我想将 null 设置为定义 int? 的键:

我的代码:

Dictionary<int?, string> dic=> Config.Where(a => a.Field == nameof(SafeFilesPath)).OrderBy(s => s.IndexOrder).ToDictionary(a => a.IndexOrder, b => b.Value);

IndexOreder 也可以是null

它失败了。 我必须使用这个空键。 我能做什么???

我从数据库中选择所有参数。 Keys 也可以是NULL

【问题讨论】:

  • 拥有带空键的字典有什么意义?那不是 List 吗?
  • @NicoRiff:因为有时候有一把钥匙,有时候我想用NULL拥有一把钥匙
  • @Ayal 如果数据来自数据库,NULL 表示没有值,而不是NULL 值。您也不能在数据库中使用Where someField = NULL。我会质疑一个数据库设计,其中一个键首先可以为空。如果您无法改进加载这些值的查询,一个好的解决方案是使用 vc74 建议的魔法值。我建议 int.MinValue 虽然数据库键通常是正数
  • @Ayal 如果您想在数据库中存储未知/缺失/不适用的条目(例如在查找表或维度表中),请使用众所周知的值,例如 -1 表示 Missing, -2 代表Not Applicable
  • 没有设置 NULL 值的选项 ???我想按原样放置这些值!没有神奇的价值

标签: c# dictionary


【解决方案1】:

只要一个对象被用作字典中的键, 它不得以任何影响其哈希值的方式发生变化。每把钥匙 在字典中必须是唯一的 字典的相等比较器。键不能为空,但值可以 是,如果值类型 TValue 是引用类型。

Dictionary Class

【讨论】:

  • 但是int? 你可以为空,不是吗?
  • @Ayal 没有。这意味着你有一些东西可以hold null,但它本身不是 null。你一开始想做什么?为什么不使用Dictionary.TryGetValue 来检查密钥是否存在?
  • 因为我想在键中插入一个带有NULL的值,所以我不想要0
  • 我从数据库中选择键,也可以是null
  • @Ayal 更新您的问题,解释您想要做什么。由于您从数据库加载数据,您可能使用的是ToDictionary,而不是Dictionary.Add。即使在数据库中,虽然您不能使用 NULL 作为键值,因为您无法将一个 null 与另一个进行比较。 NULL 表示I don't know
猜你喜欢
  • 2012-04-24
  • 2021-05-29
  • 1970-01-01
  • 2010-11-13
  • 2017-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多