web-dev-qa-db-ja.com

c#でDictionary <string、object>をDictionary <string、string>に変換する方法

私はC#で以下のコードを持っています

Dictionary<string, object> dObject = new Dictionary<string, object>();

dObjectDictionary<string, string>に変換したい。これどうやってするの?

61
Manoj Singh

ToDictionaryメソッドを使用します。

Dictionary<string, string> dString = dObject.ToDictionary(k => k.Key, k => k.Value.ToString());

ここでは、元の辞書のキーを再利用し、ToStringメソッドを使用して値を文字列に変換します。

辞書にnull値を含めることができる場合、ToStringを実行する前にnullチェックを追加する必要があります。

Dictionary<string, string> dString = dObject.ToDictionary(k => k.Key, k => k.Value == null ? "" : k.Value.ToString());

これが機能する理由は、Dictionary<string, object>は実際にはIEnumerable<KeyValuePair<string,object>>。上記のコード例は、列挙型を反復処理し、ToDictionaryメソッドを使用して新しい辞書を作成します。

編集:

.Net 2.0では、ToDictionaryメソッドを使用できませんが、古き良きforeachを使用して同じことを実現できます。

Dictionary<string, string> sd = new Dictionary<string, string>(); 
foreach (KeyValuePair<string, object> keyValuePair in dict)
{
  sd.Add(keyValuePair.Key, keyValuePair.Value.ToString());
}

Edit2:

.Net 2.0を使用しており、ディクショナリにnull値を含めることができる場合、次のことは安全です。

Dictionary<string, string> sd = new Dictionary<string, string>(); 
foreach (KeyValuePair<string, object> keyValuePair in dict)
{
  sd.Add(keyValuePair.Key, keyValuePair.Value == null ? "" : keyValuePair.Value.ToString());
}
96
Rune Grimstad

.NET 3.5:

Dictionary<string, string> result = dObject.ToDictionary(kvp => kvp.Key, kvp => Convert.ToString(kvp.Value));

.NET 2.0:

Dictionary<string, string> result = new Dictionary<string, string>();
foreach (KeyValuePair<string, object> kvp in dObject) result.Add(kvp.Key, Convert.ToString(kvp.Value));
8
Jaroslav Jandek

.net 2.0を使用しているため:

Dictionary<string, string> dString = new Dictionary<string, string>();

foreach (KeyValuePair<string, object> item in dObject)
{
    dString.Add(item.Key, item.Value.ToString());
    //here item.Value.ToString() is an example
    //you should convert your item to string according to the requirement
}
4
Cheng Chen

どうですか:

Dictionary<string, string> newDictionary = dObject.ToDictionary(k => k.Key, k => (string) k.Value);
2
Arcturus

.Net 2.0では、おそらくあなたの親友はforeach loopです:

Dictionary<string, object> dObject = new Dictionary<string, object>();
Dictionary<string, string> newObjects = new Dictionary<string, string>();

foreach (KeyValuePair<string, object> keyValuePair in dObject)
{
    newObjects.Add(keyValuePair.Key, keyValuePair.Value.ToString());
}
1
Rafal Spacjer
Dictionary<string, string> dString = dObject.ToDictionary(kvp => kvp.Key, kvp => kvp.Value.ToString());

ただのアイデアです。検証を挿入できます。

0
Y.Yanavichus