2011-06-21 20 views
0

私はそういう一般的なディクショナリ拡張メソッドを作成しようとしています。 TValueは常にintになりますが、TKeyは文字列またはDateTimeになります。一般的なC#ディクショナリを使用した拡張(つまり+)拡張メソッド

public static void AddOrIncrement<TKey, TValue>(this Dictionary<TKey, TValue> dict, TKey key, TValue value) 
{ 
    if (!dict.ContainsKey(key)) 
    { 
     dict.Add(key, value); 
    } 
    else 
    { 
     dict[key] += value; 
    } 
} 

しかし、これはコンパイルされません - 演算子「+ =」は、型「TValue」と「TValue」のオペランドに適用することはできません。

それでは、私は試してみてください。

public static void AddOrIncrement<TKey, TValue>(this Dictionary<TKey, TValue> dict, TKey key, TValue value) where TValue : int 

が、それはどちらかのコンパイルされません。 は、それでは私が試した:コンパイルされません

public static void AddOrIncrement<TKey, int>(this Dictionary<TKey, int> dict, TKey key, int value) 

は - "Typeパラメータ宣言は識別子ではないタイプでなければなりません"

答えて

4

試してください:あなたが作るしようとしている

public static void AddOrIncrement<TKey>(this Dictionary<TKey, int> dict, TKey key, int value) 
4

1つの汎用パラメータを取る拡張メソッド:

public static void AddOrIncrement<TKey>(this Dictionary<TKey, int> dict, TKey key, int value)