1

我有一个字符串字典中的信息列表,我想将其存储在我的程序的 app.config 中。

我已经在程序的“设置”部分中创建了一个名为“扩展”的条目,但是当我使用“Settings.Default.Extentions”时,我收到一个错误,即它为空。

使用它有什么技巧吗?

private void LoadextList()
{
    listBox1.Items.Clear();
    foreach (KeyValuePair<string, string> kvp in Settings.Default.Extentions)
    {
        listBox1.Items.Add(kvp.Key + "\t" + kvp.Value);
    }
}
4

3 回答 3

1

我不明白您的扩展问题,但我之前使用此代码在字符串和 NameValueCollection 之间进行转换 - 您可以轻松地将其更改为使用 StringDictionary:

    public NameValueCollection StringToNameValueCollection(string KeyValueData, char KeyValueSeparator, char ItemSeparator)
    {
        NameValueCollection nvc = new NameValueCollection();

        // split string into array of key/value pairs
        string[] kvpairs = KeyValueData.Split(new char[]{ItemSeparator});

        // add each pair to the collection
        for (int i = 0; i < kvpairs.Length; i++)
        {
            if (!string.IsNullOrEmpty(kvpairs[i]))
            {
                if (kvpairs[i].Contains(KeyValueSeparator.ToString()))
                {
                    // get the key
                    string k = kvpairs[i].Remove(kvpairs[i].IndexOf(KeyValueSeparator.ToString())).Trim();
                    // get the value
                    string v = kvpairs[i].Remove(0, kvpairs[i].IndexOf(KeyValueSeparator) + 1).Trim();

                    // add key/value if key is valid
                    if (!string.IsNullOrEmpty(k))
                    {
                        nvc.Add(k, v);
                    }
                }
                else
                {
                    // no key/value separator in the pair, so add whole string as key and value
                    nvc.Add(kvpairs[i].Trim(), kvpairs[i].Trim());
                }
            }
        }
        return nvc;
    }

将 NameValueCollection 转换为字符串:

    public string NameValueCollectionToString(NameValueCollection nvc, char KeyValueSeparator, char ItemSeparator)
    {
        StringBuilder sb = new StringBuilder();

        for(int i = 0; i < nvc.Count; i++)
        {
            if (i != 0)
            {
                sb.Append(ItemSeparator);
            }
            sb.Append(nvc.Keys[i]);
            sb.Append(KeyValueSeparator);
            sb.Append(nvc[i]);
        }

        return sb.ToString();
    }

我不得不对我使用的代码进行一些更改,但它应该可以构建。请注意,它并不太宽容 - 分隔符不能出现在“键”或“值”字符串中。

于 2009-06-04T15:26:06.843 回答
1

以下问题可能包含有用的信息:

如何在用户设置中存储哈希表?

您面临的问题是,当您使用 Settings.settings 文件和关联的自动生成的类时可用的两个序列化选项是序列化为 XML 或序列化为字符串。

该类StringDictionary既不支持 XML 也不支持字符串序列化。有一些方法可以解决此限制,其中一些方法列在前面提到的问题的答案中。

于 2010-03-05T11:59:43.797 回答
0
  public Dictionary<string,string> StringToDictonary(string KeyValueData, char KeyValueSeparator, char ItemSeparator)
{
    Dictionary<string, string> Dic = new Dictionary<string, string>();

    string[] cells = KeyValueData.Split(ItemSeparator);
    foreach (string cell in cells)
    {
        if (!string.IsNullOrEmpty(cell))
        {
            string[] value = cell.Split(KeyValueSeparator);
            if (!string.IsNullOrEmpty(value[0]) && !string.IsNullOrEmpty(value[1]))
            {
                Dic.Add(value[0], value[1]);
            }
        }
    }
    return Dic;
}

休息

    public string dictonaryToString(Dictionary<string, string> nvc, char KeyValueSeparator, char ItemSeparator)
    {
        StringBuilder sb = new StringBuilder();
        bool first = true;
        foreach (KeyValuePair<string,string> kvp in nvc)
        {
            if (!first)
            {
                sb.Append(ItemSeparator);
                first = false;
            }
            sb.Append(kvp.Key);
            sb.Append(KeyValueSeparator);
            sb.Append(kvp.Value);
        }
        return sb.ToString();
    }
}
于 2009-06-04T17:37:17.960 回答