簡體   English   中英

如何創建這樣的匿名類型var c = List <string,string []>()

[英]How to create an anonymous type like this var c = List<string, string[]>()

我想創建一個可以迭代的匿名類型 ,接受一個字符串和一個字符串數組。 目標是創建一個組列表,每個組包含人員:

我想知道像這樣的偽代碼是否可行:

var myAnoty =new List<string, string[]>();
myAnoty.add("Programmers", ["Linus", "Bill", "Anders"]);
myAnoty.add("Users", ["John", "Melissa", "Bert"]);

正如Muzz在評論中指出的,我上面的偽代碼沒有使用匿名類型。 下面的Reed Copsey回答是使用它們: var m = new { Group = "Men", Members = new[] { "John", "Tom" } }

不使用匿名類型的工作演示

以下代碼適用於LinqPad

void Main()
{
    List<Object> myAnoties = new List<Object>();
    myAnoties.Add(new Anoty {Group="Men",   Member=new string[]{"John","Tom"}} );
    myAnoties.Add(new Anoty {Group="Women", Member=new string[]{"Eve","Anna"}} );
    myAnoties.Dump();
}

// Define other methods and classes here
class Anoty{
    public string Group{get; set;}
    public string[] Member{get; set;}       
}

不使用匿名類型

以下代碼使用匿名類型。 但不知何故,字符串數組不適用於匿名類型。

var m = new { Group= "Men", Member=string[]{"John","Tom"}};
var w = new { Group= "Women", Member=string[]{"Eve","Anna"}};
List<object> myAnoties = new List<object>();
myAnoties.Add(m);
myAnoties.Add(w);

有沒有辦法得到像我的Pseudo-Code var x = new List<string,string[]>()或具有匿名類型(如上所述)的東西?

謝謝

你可以完成類似你的偽代碼:

var myAnoty = new Dictionary<string, string[]>();
myAnoty.Add("Programmers", new[] { "Linus", "Bill", "Anders" });
myAnoty.Add("Users", new[] { "John", "Melissa", "Bert" });

或者,如果您想要List<T>

var myAnoty = new List<Tuple<string, string[]>>();
myAnoty.Add(Tuple.Create("Programmers", new[] { "Linus", "Bill", "Anders" }));
myAnoty.Add(Tuple.Create("Users", new[] { "John", "Melissa", "Bert" }));

您還可以在匿名類型中使用數組:

var m = new { Group = "Men", Members = new[] { "John", "Tom" } } 
var w = new { Group = "Women", Members = new[] { "Eve", "Anna" } };

但是,將其分配到List<object>將使此實際上無法使用,因為您將無法再按名稱訪問項目。 但是,您可以將它們放入List<dynamic>並訪問它們。

話雖這么說,我強烈建議重新考慮完全使用匿名打字的目標。 對於要存儲對象的情況,使用命名類型通常是優先的。 匿名類型在這種情況下節省了一些輸入,但增加了巨大的維護成本,因為它們增加了很多復雜性,並且你失去了很多安全性(即:沒有適當的構造函數等)。 創建自定義類型所需的額外時間通常遠小於在您將持久保存值的情況下使用匿名類型的調試和維護成本。

暫無
暫無

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

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