1

文字列に値をIDictionary書き込む拡張機能を作成しました。IDictionary Exception.Data

拡張コード:

public static class DictionaryExtension
{
    public static string ToString<TKey, TValue>(this IDictionary<TKey, TValue> source, string keyValueSeparator, string sequenceSeparator)
    {
        if (source == null)
            throw new ArgumentException("Parameter source can not be null.");

        return source.Aggregate(new StringBuilder(), (sb, x) => sb.Append(x.Key + keyValueSeparator + x.Value + sequenceSeparator), sb => sb.ToString(0, sb.Length - 1));           
    }
}

この拡張機能を使用するException.Data.ToString("=", "|")と、エラーが発生します

The type arguments cannot be inferred from the usage.

これを解決する方法はありますか?

4

2 に答える 2

7

Exception.DataタイプIDictionaryではなく、IDictionary<TKey, TValue>です。

拡張メソッドを次のように変更する必要があります。

public static string ToString(this IDictionary source, string keyValueSeparator,
                                                       string sequenceSeparator) 
{ 
    if (source == null) 
        throw new ArgumentException("Parameter source can not be null."); 

    return source.Cast<DictionaryEntry>()
                 .Aggregate(new StringBuilder(),
                            (sb, x) => sb.Append(x.Key + keyValueSeparator + x.Value
                                                  + sequenceSeparator),
                            sb => sb.ToString(0, sb.Length - 1));            
} 
于 2012-08-30T12:44:12.653 に答える
0

例外は、キャストが欠落していることを示しています。テストプロジェクトでコードをコピーしましたが、エラーを再現できませんでした。x.Key.ToString()とを使用してみてくださいx.Value.ToString()。私が見つけた唯一のことは、辞書が空のときに発生するエラーです: sb.ToString(0, sb.Length - 1)長さがゼロのときは機能していません

于 2012-08-30T13:16:41.780 に答える