3

文字列と文字列配列を取り、反復可能な匿名型を作成したいと思います。目標はグループのリストを作成することであり、各グループには個人が含まれます。

この擬似コードのようなものが可能かどうか知りたいのですが:

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

Muzzがコメントで指摘したように、上記の擬似コードは匿名型を使用していません。以下のリードコプシーの答えはそれらを使用しています: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);

私の擬似コードのようなvar x = new List<string,string[]>()ものや匿名タイプ(上記のような)のものを実行する方法はありますか?

ありがとう

4

1 に答える 1

5

あなたはあなたの擬似コードのような何かを成し遂げることができます:

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>

そうは言っても、匿名タイピングを完全に使用するという目標を再考することを強くお勧めします。名前付き型の使用は、通常、オブジェクトを格納する状況で優先されます。匿名型は、このシナリオでの入力を少し節約しますが、多くの複雑さを追加するため、莫大な保守コストが追加され、多くの安全性が失われます(つまり、適切なコンストラクターがないなど)。カスタムタイプを作成するために必要な余分な時間は、通常、値を永続化するシナリオで匿名タイプを使用する場合のデバッグおよびメンテナンスのコストよりもはるかに少なくなります。

于 2012-10-29T22:03:44.110 に答える