C#:从 OrderedDictionary.Keys 构建 HashSet 的更优雅方式?

C#: more elegant way to build a HashSet from the OrderedDictionary.Keys?

我有一个 OrderedDictionary d 填充了字符串键(+ 对象作为值)。我需要将字典键复制到 HashSet<string> hs.

我现在是这样做的:

OrderedDictionary d = new OrderedDictionary();
// ... filling d ...

HashSet<string> hs = new HashSet<string>();

foreach (string item in d.Keys)
    hs.Add(item);

我知道字典有.CopyTo()方法来填充字符串数组。有没有更优雅的方法将密钥也复制到 HashSet?

更新: 似乎建议的 new HashSet<string>(d.Keys.Cast<string>()); 不适用于 OrderedDictionary。编译器(VS2019 Community Ed.)说...

错误 CS1929 'ICollection' 不包含 'Cast' 的定义,最佳扩展方法重载 'EnumerableRowCollectionExtensions.Cast(EnumerableRowCollection)' 需要 'EnumerableRowCollection'

类型的接收器

更新 2: 添加 using System.Linq; 后,上述更新有效。

当然 - 使用构造函数,相应地转换 Keys 属性 序列:

var hs = new HashSet<string>(d.Keys.Cast<string>());

(与 LINQ 一样,请确保您有 System.Linq 命名空间的 using 指令。)