2014-10-03 57 views
0

我有一個類,它有一個字符串集合,用於在存儲它們之前驗證值。該集合的聲明如下所示:從C中的外部數據加載字符串集合#

public readonly System.Collections.Specialized.StringCollection RetentionRange = 
      new System.Collections.Specialized.StringCollection() 
      { "NR", "AR", "PE", "EX", "LI", "TE", "FR" }; 

我想維護已編譯類之外的有效代碼列表。我該如何解決這個問題?順便說一句,沒有要求字符串被限制爲兩個字符,它們恰好在當前的方案中。

編輯:「外部數據」我的意思是像一個配置文件。

+1

你總是可以序列化類或集合 – Plutonix 2014-10-03 22:39:02

回答

1

您可以在AppSettings中存儲StringCollection

每個值由一個新行分隔。

下面是截圖(德國IDE,但它可能會有所幫助反正)

enter image description here

你可以這樣閱讀:

var myStringCollection = Properties.Settings.Default.MyCollection; 
foreach (String value in myStringCollection) 
{ 
    // do something 
} 
+0

爲什麼應用程序設置,爲什麼不是XML或結構化文本文件,或者如果OP有一個數據庫? – JAX 2014-10-03 22:39:09

+1

@JAX:爲什麼不是數據庫?有很多方法來存儲的東西。但我沒有時間提供所有。另外,OP提到了StringCollection,它是默認情況下可以在應用程序設置中使用的唯一集合。而OP也提到他想使用配置文件。你可以編輯這個集合而不需要重新編譯,因爲它存儲在一個xml文件中。 – 2014-10-03 22:40:48

+0

我不清楚你在暗示什麼,不幸的是我的德語不夠好,無法展開我在屏幕截圖中看到的內容。 :\ – 2014-10-03 22:42:40

0

在一個文本文件中存儲它是一種選擇。

如何存儲:

var dir = @"somedirectory\textfile.txt"; 

    var text = string.Join(",",RetentionRange.Cast<string>()); 
    File.WriteAllText(dir,text); 

如何檢索:

var text= File.ReadAllText(@"somedirectory\textfile.txt"); 
foreach(var str in text.Split(",")) 
    RetentionRange.Add(text); 
0

正確回答你的問題取決於你爲什麼要存儲外琴絃很大部件。

假設你想這是因爲字符串的集合,預計隨時間而變化的原因,我建議你創建自己的System.Configuration.ConfigurationSection實現定義的元素作爲System.Configuration.ConfigurationElementCollection實例之一。如果這對你的需求來說太複雜了,那麼一個appSettings鍵值由一個以逗號分隔的字符串列表組成(你可以在運行時從中建立你的StringCollection),這實際上可能是一個更好的解決方案。

The answers to this question有這兩種方法的例子。