2009-06-04 6 views
1

내 프로그램의 app.config에 저장하려는 문자열 사전에 정보 목록이 있습니다.app.config에서 StringDictionary를 저장하고 검색하는 방법은 무엇입니까?

"확장"이라고하는 프로그램의 "설정"부분에 항목을 만들었지 만 "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); 
    } 
} 
+0

확장 프로그램을 생성 한 코드/스크린 샷을 붙여 넣을 수 있습니까? – Grzenio

+0

설정에 따라 프로젝트의 propertys에서 extentions를 collections.special.stringdictonary로 만들었습니다. (정말로 원하는 경우 화면 갓을 게시 할 수 있습니다) – Crash893

+0

app.config의 문자열을 사용하여이 작업을 수행 할 수 있음을 언급해야합니다. . 나는 방금 문자열 사전으로 그것을하는 방법을 혼란스러워했다. – Crash893

답변

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

내가 사용되는 코드의 변경의 몇했습니다했지만, 그것은 구축해야한다. 너무 용서하지 않습니다. 구분 문자는 'key'또는 'value'문자열에 나타날 수 없습니다.

+0

을 참조하십시오. 아프지 만, 나는 아직도 내가 stringdictonary를 구할 수없는 이유를 알지 못하는 것에 대해 기성복을 놓치고있는 것처럼 느낀다. – Crash893

+0

지금은 그것을 정렬하지만 첫 번째 방법은 모든 경로가 반환하지 않는 오류를 throw합니다 (나는 그것을 알아낼 수 있지만 대중을위한 코드를 편집 할 수 있습니다) – Crash893

+0

감사합니다, 중괄호를 놓친 것 같습니다 이제 괜찮을거야. – Nick

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

다음과 같은 질문은 아마 유용한 정보가 포함되어

How to store a HashTable in the usersettings?

당신이 직면하고있는 문제가 사용할 수있는 두 가지 직렬화 옵션을 사용하면이 설정을 사용할 때이다. 설정 파일 및 연관된 자동 생성 클래스는 XML에 대한 직렬화 또는 문자열에 대한 직렬화입니다.

StringDictionary 클래스는 XML이나 문자열 직렬화를 지원하지 않습니다. 이 제한 사항을 해결할 수있는 몇 가지 방법이 있으며 그 중 일부는 이전에 언급 한 질문에 대한 답변에 나열되어 있습니다.