【问题标题】:How to convert Dictionary<string, object> to Dictionary<string, string> in c#如何在 C# 中将 Dictionary<string, object> 转换为 Dictionary<string, string>
【发布时间】:2011-02-09 08:18:24
【问题描述】:

我在 C# 中有以下代码

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

我想将dObject 转换为Dictionary&lt;string, string&gt;。我该怎么做?

【问题讨论】:

    标签: c# c#-2.0


    【解决方案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&lt;string, object&gt; 实际上是IEnumerable&lt;KeyValuePair&lt;string,object&gt;&gt;。上面的代码示例遍历枚举并使用 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());
    }
    

    编辑2:

    如果您使用的是 .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());
    }
    

    【讨论】:

    • 我正在使用 .NET 2.0,可以在其中使用。我没有收到“ToDictionary”
    • @Rune:k.Value.ToString() 的返回值是否始终与(string)k.Value 相同?
    • @Oscar:不。如果值是非字符串对象,则 (string)k.Value 将失败。 ToString() 对于所有非空值都是安全的。
    • @Rune:是的,我知道。假设所有元素都是字符串。 ToString()(string) 会返回相同的结果吗?
    • 我可以建议改用Convert.ToString()。所以处理null 值会容易一些。 Convert.ToString(keyValuePair.Value)Convert.ToString(keyValuePair.Value) ?? String.Empty
    【解决方案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
      }
      

      【讨论】:

      • 如果里面有NULL值怎么办?
      • @MKS:这就是为什么我说“根据要求将您的项目转换为字符串”,例如您可以将string.Empty 用于空值,或者将字符串“NULL”用于空值...一切都取决于要求。
      • 有时候key里面也有空值,请问如何转换?
      【解决方案4】:

      怎么样:

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

      【讨论】:

      • 如果字典包含非字符串值,这将失败。例如,您不能将 int 转换为字符串。
      • 首先我使用的是.NET 2.0,在里面是可以的。我没有得到“ToDictionary”方法。
      • 好吧,我想如果他想这样做是因为字典包含strings,但无论如何,这是有效的。
      • 是的,是的。但是 ToString 并不总是产生一个好的字符串。无论如何,这一切都取决于您的 Dictionary 对象。 :)
      • 由于您使用的是.NET 2.0,foreach 将是您最好的伙伴!总帐
      【解决方案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());
        

        这只是想法。您可以插入任何验证。

        【讨论】:

          猜你喜欢
          • 2014-10-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-03-01
          • 2012-07-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多