C#相当于Java的双括号初始化?

时间:2014-01-10 21:08:33

标签: c#

C#中的预期代码(Java有)

List<String> myList = new List<String>() {{
    add("Hello");
    add("World!");
}}
// myList = [ "Hello", "World" ]

只是想知道是否有一个等价的,可能还有C#的静态构造函数?

修改

为了澄清这一点,不是明确的集合,而是任何类结构。 例如:

abstract class myClass {
  String data;
  List<String> list;
  void setupList() {
    list = new List<String>();
  }
}

...

var obj = new myClass() {{
  data = "Yo";
  setupList();
}};

3 个答案:

答案 0 :(得分:14)

您正在寻找集合初始化程序语法:

List<String> myList = new List<String>() {"Hello","World!"};

答案 1 :(得分:1)

这是一个对象初始值设定项,它也使用集合初始值设定项(注意集合初始值设定项中的类型推断,创建的List的类型为List):

var myClass = new MyClass{
    Data = "foo",
    List = new List{"item1", "item2"},
    IntArray = new[]{1,2,3},
    Dictionary = new Dictionary<string,string>{{"key1","value1"},{"key2","value2"}},
};

您无法在初始化程序中调用SetupList()等任意方法,而是在第一次访问或静态时初始化List属性等。 您可以使用Lazy类或自己实现它(??是空合并运算符):

class MyClass{
    public string Data { get; set; }

    private IList<string> _list0 = new List();

    public IList<string> List0
    {
        get
        {
            return _list0;
        }
    }

    private IList<string> _list1;

    public IList<string> List1
    {
        get
        {
            return _list1 ?? (_list1 = new List());
        }
    }

    private readonly Lazy<IList<string>> _lazyList = new Lazy<IList<string>>(() => new List<string>()); 

    public IList<string> List2
    {
        get
        {
             return _lazyList.Value;
        }
    } 

}

答案 2 :(得分:0)

这是您可以将项目添加到字符串列表

的方法
List<string> myList = new List<string>();
myList.Add("Hello");
myList.Add("World!");

如果你想删除它们,你可以简单地执行此操作

myList.Remove("Hello");
myList.Remove("World!");