1

プログラムの app.config に保存したい文字列辞書に情報のリストがあります。

「extentions」というプログラムの「設定」部分にエントリを作成しましたが、「Settings.Default.Extentions」を使用すると、null であるというエラーが表示されます。

これを使うのに何かコツとかありますか?

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

次の質問には、おそらく役立つ情報が含まれています。

ユーザー設定に HashTable を保存する方法は?

あなたが直面している問題は、Settings.settings ファイルと関連する自動生成クラスを使用するときに使用できる 2 つのシリアル化オプションが、XML へのシリアル化または文字列へのシリアル化であることです。

このStringDictionaryクラスは、XML も文字列のシリアル化もサポートしていません。この制限を回避する方法はいくつかあり、そのいくつかは前述の質問への回答に記載されています。

于 2010-03-05T11:59:43.797 に答える