[英]Instantiate a List inside of type initializer
說我有一個像這樣的struct
public struct MyStruct
{
string StructConfig { get; set; }
List<string> Details { get; set; }
public MyStruct
{
Details = new List<string>();
}
}
我使用以下方法實例化此struct
:
MyStruct s = new MyStruct()
{
StructConfig = "Some config details"
}
我想知道如何添加一個foreach
循環,該循環會將詳細信息添加到Details
屬性中,而不是這樣做:
MyStruct s = new MyStruct()
{
StructConfig = "Some config details"
}
s.Details = new List<string>();
foreach (var detail in someArray)
s.Details.Add(detail);
這有可能嗎? 我是否夢想着代碼奢侈?
您可以這樣做:
MyStruct s = new MyStruct()
{
StructConfig = "Some config details",
Details = new List<string>(someArray)
}
之所以List<T>
是因為List<T>
支持通過此構造方法從IEnumerable<T>
進行初始化。
如果需要對someArray
的元素進行其他准備,則可以使用LINQ並添加Select
。 下面的示例在每個元素周圍添加單引號:
Details = new List<string>(someArray.Select(s => string.Format("'{0}'", s)))
怎么樣?
s.Details = new List<string>(someArray);
假設您不想從數組初始化列表,但確實希望能夠直接在初始化程序中寫入列表元素,則可以使用集合初始化程序 :
var myStruct = new MyStruct() {
StructConfig = "Some config details",
Details = new List<string>() { "a", "b", "c" }
};
現在,擁有包含字符串和字符串列表的結構看起來有些奇怪,但這並不影響如何回答問題。
可以做這樣的事情
MyStruct s = new MyStruct
{
StructConfig = "Some config details",
Details = someArray.ToList()
};
您可以在“ someArray”集合上調用擴展方法ToList(),這將創建它的副本,您可以將其分配給struct屬性,如下所示:
MyStruct s = new MyStruct()
{
StructConfig = "Some config details",
Details = someArray.ToList()
}
類似於以下內容:
s.Details = someArray.Select(detail=> detail.ToString()).ToList()
如果您的數組不是字符串[],將防止引發異常。 當然,您可能希望在這種情況下引發異常。
另外,值得考慮為什么要使用具有List屬性的結構。 最好有一個類而不是一個結構。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.