改变foreach返回值

时间:2016-06-27 23:10:34

标签: c#

我遍历一个充当数据结构的对象。该结构只是一个包含KeyPairValue的列表,我想知道在使用foreach循环时是否可以获取Value。

2 个答案:

答案 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();
}

(我确定很多人已经知道这一点,但我找不到任何东西,所以我想我也可以扩展以防万一其他人遇到类似的问题。)