1

Dictionary<string, obj>コレクション内の各単一オブジェクトに別のプロパティとしてキーが含まれるように、オブジェクトのコレクションに変換する方法はありますか?

これがobjのクラスdefです

class someclass
{
  string property1;
  string property2;
}

変換後、コレクション内の各オブジェクトは次のようになると期待しています

obj.property1
obj.property2
obj.Key

私は長い間これに苦労してきました、そして私はいくつかの助けを求めています。何か案は?

前もって感謝します。

4

4 に答える 4

2

何かのようなもの

var myCollection = from de in myDictionary 
                   select new
                   {
                       de.Value.property1,
                       de.Value.property2,
                       de.Key
                   }.ToList();  // or .ToArray()

トリックを行う必要があります。

これにより、要求したプロパティを持つ新しい匿名型の List が返されます。

于 2012-07-19T18:53:01.847 に答える
2

また、(匿名型 apporachに加えて) を使用することもできますList<Tuple<string, string, string>>:

var list= dictionary
         .Select(kv => Tuple.Create(kv.Value.property1, kv.Value.property2, kv.Key))
         .ToList();

foreach(var item in list)
{
   Console.WriteLine("property1:{0 property2:{1} key:{2}"
                     , item.Item1
                     , item.Item2
                     , item.Item3);
}

匿名型に対する利点はTuple、メソッドから簡単に を返すことができることです。

編集:3番目のオプション(私のお気に入り)は、どこかで宣言したクラスのインスタンスを作成することです。それが理想のやり方です。「その場で」クラスが必要だと思った理由がわかりません。

class someOtherClass
{
    public string property1{ get; set; };
    public string property2{ get; set; };
    public string Key{ get; set; };
}

List<someOtherClass> objects = dictionary
.Select(kv => new someOtherClass(){
     property1 = kv.Value.property1, 
     property2 = kv.Value.property2, 
     Key       = kv.Key 
 })
.ToList();
于 2012-07-19T18:57:26.100 に答える
1

次のような結果を保存したくない場合は、匿名タイプを使用できます。たとえば、データソースとして使用する場合などです。

var res = myDictionary.Select(pair => new { pair.Key, pair.Value.Property1, pair.Value.Property2 });
于 2012-07-19T23:20:02.010 に答える
0

他の答えは良いので、これは単なる補足です。

Length次の3つの配列を使用できます。

var arrays = myDictionary
    .Select(kv => new[] { kv.Value.property1, kv.Value.property2, kv.Key, });

または、新しいクラスを作成することもできます

class SomeclassAndKey
{
  public string property1;
  public string property1;
  public string Key;
}

そして言う

var someclassAndKeys = myDictionary
    .Select(kv => new SomeclassAndKey { property1 = kv.Value.property1, property2 = kv.Value.property2, Key = kv.Key, });

.ToList()いずれの場合も、列挙を延期せずに完全に取得したい場合は、追加できますList<>

于 2012-07-19T19:20:21.707 に答える