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を送信しています。クエリで使用してそのDataTableを作成してorder by columnnameいます。

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 に答える