Подтвердить что ты не робот

Как преобразовать словарь <string, object> в словарь <string, string> в С#

У меня есть код в С#

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

Я хочу преобразовать dObject в Dictionary<string, string>. Как я могу это сделать?

4b9b3361

Ответ 1

Используйте метод ToDictionary:

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

Здесь вы повторно используете ключ из исходного словаря и преобразуете значения в строки с помощью метода ToString.

Если ваш словарь может содержать нулевые значения, перед выполнением ToString следует добавить нулевую проверку:

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

Причина этого в том, что Dictionary<string, object> на самом деле является IEnumerable<KeyValuePair<string,object>>. Вышеприведенный пример кода выполняет итерацию через перечислимый и создает новый словарь с использованием метода ToDictionary.

Edit:

В .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, и вы можете иметь нулевые значения в словаре, это должно быть безопасно:

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());
}

Ответ 2

.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));

Ответ 3

Поскольку вы используете .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

Как насчет:

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

Ответ 5

В .Net 2.0, вероятно, ваш лучший друг: foreach:

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());
}

Ответ 6

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

Это просто идея. Вы можете вставить любые проверки.