1. ホーム
  2. c#

[解決済み] LINQで辞書<T1, T2>を選択する

2022-04-14 21:57:26

質問

キーワードとエクステンション・メソッドを使って、"select" "メソッドで IEnumerable<T> をLINQで返す必要があるのですが、一般的な Dictionary<T1, T2> というのがあって、それがわからないのです。 私が学んだ例では、以下のような形のものが使われていました。

IEnumerable<T> coll = from x in y 
    select new SomeClass{ prop1 = value1, prop2 = value2 };

また、拡張メソッドでも同じようなことをしました。 Dictionary<T1, T2> として反復することができます。 KeyValuePair<T1, T2> 上記の例の "SomeClass" を " に置き換えるだけで良いということです。 new KeyValuePair<T1, T2> { ... しかし、それはうまくいきませんでした(KeyとValueがreadonlyとしてマークされていたので、このコードをコンパイルすることができませんでした)。

これは可能でしょうか、それとも複数のステップで行う必要があるのでしょうか?

ありがとうございます。

解決方法は?

また、extensionsのメソッドは ToDictionary の拡張機能です。 一般的な使い方は、キーにラムダセレクタを渡し、値としてオブジェクトを取得するというものですが、キーと値の両方にラムダセレクタを渡すこともできます。

class SomeObject
{
    public int ID { get; set; }
    public string Name { get; set; }
}

SomeObject[] objects = new SomeObject[]
{
    new SomeObject { ID = 1, Name = "Hello" },
    new SomeObject { ID = 2, Name = "World" }
};

Dictionary<int, string> objectDictionary = objects.ToDictionary(o => o.ID, o => o.Name);

次に objectDictionary[1] という値が含まれます。