![](/img/trans.png)
[英]Is there an Objective-C/C++ equivalent to C#'s member brace-initialization capability?
[英]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.