1

我有一个Enumerable<KeyValuePair<TKey, TValue>>. 我想创建它的bool TryGetValue(TKey, out TValue)扩展方法,就像它在Dictionary<TKey, TValue>.

我试过了

public static bool TryGetValue<TKey, TValue>
(this Enumerable<KeyValuePair<TKey, TValue>> mapping, TKey key, out TValue value)
{
    bool retVal = false;

    KeyValuePair<TKey, TValue> kvp;

    kvp = mapping.First(x => x.Key.Equals(key));

    if(kvp.Key == null && kvp.Value == null)
    {
        retVal = false;
        value = default(TValue);
    }
    else
    {
        retVal = true;
        value = kvp.Value;
    }

    return retval;
}

这是正确的方法吗?如果没有,请推荐一个。

笔记:

我不能使用字典,因为键是重复的。而且它只会返回第一个匹配值?

What happens to the rest?

我们可以离开他们。我正在发送从 DataTable 创建的 KeyValuePair。我order by columnname在其查询中使用创建该 DataTable。

4

1 回答 1

5

为什么不只使用一个简单的foreach循环?


例子:

public static bool TryGetValue<TKey, TValue>
(this KeyValuePair<TKey, TValue>[] mapping, TKey key, out TValue value)
{
    foreach(var kvp in mapping)
        if (kvp.Key.Equals(key))
        {
            value = kvp.Value;
            return true;
        }

    value = default(TValue);
    return false;
}

如果密钥由于. .First()_FirstOrDefault()KeyValuePairnull


边注:

KeyValuePair<TKey, TValue>[]您可能希望使用IEnumerable<KeyValuePair<TKey, TValue>>更灵活的而不是扩展。

于 2012-07-31T10:58:09.073 回答