【问题标题】:Get all entries from an IDictionary从 IDictionary 中获取所有条目
【发布时间】:2023-04-10 02:19:01
【问题描述】:

我有一个IDictionary(不是IDictionary<TKey, TValue>)并想从中获取键和值。

最后,我希望将键和值作为字符串,例如 key1=value1;key2=value2;...,但首先我需要正确转换这些对。

我已经尝试了一些解决方案,例如 IDictionary to string,但没有一个适用于 IDictionary

我要阅读的字典是 Exception.Data 字典。

【问题讨论】:

    标签: c# dictionary


    【解决方案1】:

    在 IDictionary 实例上使用 foreach 循环来创建预期的字符串

    IDictionary 具有 Keys 和 Values 属性,但您可以通过使用返回 DictionaryEntryGetEnumerator 的这种扩展方法来实现您的目标:

    using System.Collections;
    
    static public class IDictionaryHelper
    {
      static public string ToStringFormatted(this IDictionary dictionary,
                                             char separator = ';')
      {
        string result = "";
        foreach (DictionaryEntry item in dictionary)
          result += $"{item.Key.ToString()}={item.Value.ToString()}{separator}";
        return result.TrimEnd(separator);
      }
    }
    

    测试

    using System.Collections.Generic;
    
    IDictionary myDictionary = new Dictionary<string, int>();
    
    myDictionary.Add("a", 1);
    myDictionary.Add("b", 2);
    myDictionary.Add("c", 3);
    
    Console.WriteLine(myDictionary.ToStringFormatted());
    

    Fiddle Snippet

    输出

    a=1;b=2;c=3
    

    如果需要解析大型集合,可以使用 StringBuilder

    using System.Collections;
    using System.Text;
    
    static public string ToStringFormatted(this IDictionary dictionary, char separator = ';')
    {
      var builder = new StringBuilder();
      foreach ( DictionaryEntry item in dictionary )
        builder.Append($"{item.Key.ToString()}={item.Value.ToString()}{separator}");
      return builder.ToString().TrimEnd(separator);
    }
    

    如果您想获取键和值列表

    var keys = dictionary.Keys;
    var values = dictionary.Values;
    
    var listKeys = new List<object>();
    var listValues = new List<object>();
    
    foreach ( var item in keys )
      listKeys.Add(item);
    
    foreach ( var item in values )
      listValues.Add(item);
    

    【讨论】:

      【解决方案2】:

      这应该可以完成工作

      StringBuilder sb = new StringBuilder();
      
      foreach (DictionaryEntry entry in (IDictionary)dictionary)
      {
          sb.Append($"{entry.Key}={entry.Value};");
      }
      
      return sb.ToString();
      

      【讨论】:

        猜你喜欢
        • 2014-06-28
        • 2013-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多