我想在我的 C# 类中初始化一个静态集合——像这样:
public class Foo {
private static readonly ICollection<string> g_collection = ???
}
我不确定这样做的正确方法;在 Java 中我可能会做类似的事情:
private static final Collection<String> g_collection = Arrays.asList("A", "B");
C# 2.0 中是否有类似的结构?
我知道在更高版本的 C#/.NET 中,您可以执行集合初始化程序 (http://msdn.microsoft.com/en-us/library/bb384062.aspx),但目前我们的系统不支持迁移。
为了澄清我原来的问题——我正在寻找一种方法来简洁地声明一个简单的静态集合,例如一个简单的字符串常量集合。对于更复杂对象的集合,静态初始化器风格的方法也非常有用。
谢谢!
最佳答案
如果我完全理解您的问题,那么其他人似乎没有捕获要点,您希望以类似于 Java 的方式创建静态集合,因为您可以在一行代码中声明和填充,而无需创建一个专用方法来执行此操作(根据其他一些建议)。这可以使用数组文字来完成(写成两行以防止滚动):
private static readonly ICollection<string> Strings =
new string[] { "Hello", "World" };
这既声明了新的只读集合,又用项目列表填充了它。在 2.0 和 3.5 中工作,我测试它只是为了加倍确定。
虽然在 3.5 中您可以使用类型推断,因此您不再需要使用删除更多击键的 string[] 数组:
private static readonly ICollection<string> Strings =
new[] { "Hello", "World" };
注意第二行中缺少的“string”类型。字符串是从数组初始值设定项的内容中自动推断出来的。
如果您想将其填充为列表,只需将新的字符串 [] 更改为新的列表即可:
private static readonly ICollection<string> Strings =
new List<string>() { "Hello", "World" };
当然,因为你的类型是IEnumerable而不是具体的实现,所以如果你想访问List
((List<string>)Strings).ForEach(Console.WriteLine);
但为迁移性付出的代价很小 [这是一个词吗?]。
关于c# - 在 C# 2.0 中初始化非空静态集合的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/413700/