在C#中从外部数据加载字符串集合

时间:2014-10-03 22:34:05

标签: c# collections

我有一个类,它有一组字符串,用于在存储它们之前验证值。该集合的声明如下:

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

我想维护已编译类之外的有效代码列表。我该怎么做?顺便说一句,没有要求将字符串限制为两个字符,它们恰好在当前的方案中。

编辑:通过"外部数据"我的意思是配置文件。

3 个答案:

答案 0 :(得分:1)

您可以在AppSettings中存储StringCollection

每个值用新行分隔。

这是一个截图(德语IDE,但无论如何它可能都有帮助)

enter image description here

您可以这样阅读:

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

答案 1 :(得分: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);

答案 2 :(得分:0)

您的问题的正确答案很大程度上取决于您希望将字符串存储在程序集之外的原因。

假设你想要的原因是因为字符串的集合预计会随着时间而改变,我建议你创建自己的System.Configuration.ConfigurationSection实现,将其中一个元素定义为System.Configuration.ConfigurationElementCollection实例。如果这对于您的要求来说太复杂了,那么appSettings键的值由逗号分隔的字符串组成(在运行时从中构建StringCollection)可能实际上是一个更好的解决方案。

The answers to this question有这两种方法的例子。