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
指令。)
我有一个 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
指令。)