gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 04:41:41 26 4
gpt4 key购买 nike

我想在我的 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com