簡體   English   中英

C#是否等效於Java的Double Brace初始化?

[英]C# Equivalent to Java's Double Brace Initialization?

C#中的預期代碼(Java具有)

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

只是想知道是否存在等效項,可能與C#的靜態構造函數有關?

編輯:

為了澄清這一點,不是針對Collections而是針對任何類結構。 例如:

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

...

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

您正在尋找集合初始化器語法:

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

這是一個對象初始化程序,它也使用集合初始化程序(請注意集合初始化程序中的類型推斷,所創建的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;
        }
    } 

}

這樣可以將項目添加到字符串列表中

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

如果要刪除它們,只需執行此操作

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM