私はC#で以下のコードを持っています
Dictionary<string, object> dObject = new Dictionary<string, object>();
dObject
をDictionary<string, string>
に変換したい。これどうやってするの?
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());
}
.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));
.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
}
どうですか:
Dictionary<string, string> newDictionary = dObject.ToDictionary(k => k.Key, k => (string) k.Value);
.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());
}
Dictionary<string, string> dString = dObject.ToDictionary(kvp => kvp.Key, kvp => kvp.Value.ToString());
ただのアイデアです。検証を挿入できます。