我遍历一个充当数据结构的对象。该结构只是一个包含KeyPairValue的列表,我想知道在使用foreach循环时是否可以获取Value。
答案 0 :(得分:1)
你可以实现类似的东西
public IEnumerable<V> EnumerateValues(IEnumerable<KeyValuePair<K, V>> list)
{
foreach (var kv in list) yield return kv.Value;
}
您可以在实际类型中替换K和V,或者查看用于较小更改的注释以创建泛型函数。
答案 1 :(得分:0)
为了进一步扩展Eric J的答案,如果你想完全改变自定义集合的工作方式,你可以做一些事情。我的数据结构已经有一个私有列表,所以我不需要将它作为值传递。以下内容将使您无论何时迭代您的集合,它都会返回您想要的内容。
public IEnumerable<V> EnumerateValues()
{
foreach (var kv in privateList) yield return kv.Value;
}
public IEnumerator<KeyValuePair<K, V>> GetEnumerator()
{
return EnumerateValues().GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
(我确定很多人已经知道这一点,但我找不到任何东西,所以我想我也可以扩展以防万一其他人遇到类似的问题。)