当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《在C#2.0中初始化非空静态集合的正确方法是什么?》经验,为你挑选了3个好方法。

我想在我的C#类中初始化一个静态集合 - 如下所示:

public class Foo {
  private static readonly ICollection g_collection = ???
}

我不确定这样做的正确方法; 在Java中我可能会做类似的事情:

private static final Collection g_collection = Arrays.asList("A", "B");

在C#2.0中是否有类似的结构?

我知道在C#/ .NET的更高版本中你可以做集合初始化器(http://msdn.microsoft.com/en-us/library/bb384062.aspx),但目前我们的系统不能选择迁移.

澄清我原来的问题 - 我正在寻找一种方法来简洁地声明一个简单的静态集合,例如一个简单的常量字符串集合.对于更复杂的对象的集合,静态初始化器方式也非常好.

谢谢!



1> BenAlabaster..:

如果我完全理解你的问题,似乎有些人忽略了这一点,你正在寻找以类似于Java的方式创建静态集合,因为你可以在一行代码中声明和填充而无需创建专用这样做的方法(根据其他一些建议).这可以使用数组文字(写入两行以防止滚动)来完成:

private static readonly ICollection Strings = 
  new string[] { "Hello", "World" };

这一次都使用项目列表声明和填充新的只读集合.在2.0和3.5中工作,我测试它只是为了倍加肯定.

在3.5中你可以使用类型推断,所以你不再需要使用string []数组来删除更多的击键:

private static readonly ICollection Strings = 
  new[] { "Hello", "World" };

注意第二行中缺少的"字符串"类型.从数组初始值设定项的内容自动推断字符串.

如果要将其填充为列表,只需为新列表a la更新新字符串[]:

private static readonly ICollection Strings = 
  new List() { "Hello", "World" };

当然,因为你的类型是IEnumerable而不是特定的实现,如果你想访问特定于List 的方法,比如.ForEach(),你需要将它转换为List:

((List)Strings).ForEach(Console.WriteLine);

但这对于可迁移性来说是一个很小的代价[就是这个词?].



2> Kent Boogaar..:

静态结构:

public class Foo
{
    private static readonly ICollection _collection;

    static Foo()
    {
        _collection = new List();
        _collection.Add("One");
        _collection.Add("Two");
    }
}

但请注意,在这种情况下,您只需初始化内联集合(建议出于性能原因):

private static readonly ICollection _collection = new List(new string[] { "One", "Two" });

这实际上取决于初始化代码的复杂程度.



3> ChrisW..:

也许你可以调用静态方法:

public class Foo
{
    private static readonly ICollection g_collection = initializeCollection();

    private static ICollection initializeCollection()
    {
        ... TODO allocate and return something here ...
    }
}

或者,拥有一个静态构造函数(正如其他人建议的那样)可能是等效的,甚至更具惯用性.

推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有