c# - 在 C# 2.0 中初始化非空静态集合的正确方法是什么?

标签 c# collections

我想在我的 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特有的方法,比如.ForEach(),你就需要把它转换成List:

((List<string>)Strings).ForEach(Console.WriteLine);

但为迁移性付出的代价很小 [这是一个词吗?]。

关于c# - 在 C# 2.0 中初始化非空静态集合的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/413700/

相关文章:

java - "Closed"Java/Scala 中的 HashMap

java - 如何从 Option[Map[String,Seq[String]]] 中知道是否包含键?

java - 通过 Arraylist 进行查询

c# - .NET 通用集?

iOS Swift - CGSizeFromString 抛出 CGSizeZero

c# - 如何将 var 类型转换为 int?

c# - 使用 POST 方法上传 JSON 对象时抛出 Bad Request Exception

c# - 在 XNA 中进行文本输入(用于输入姓名、聊天)

c# - 为什么调试器内存窗口在 VS 2015 中不可用?

c# - Entity Framework 核心 : How to configure model with two One to Many relations in one entity referencing the same table