13

コードを差し替えてみました

foreach (var discovery in mpwrapper.parser.Discoveries)
{
   solution.AddFile("Discoveries", discovery.DisplayStringName + ".mpx", discovery);
}

次のlinq式で

mpwrapper.parser.Discoveries.Select(
                    s => solution.AddFile("Discoveries", s.DisplayStringName + ".mpx", s));

しかし、エラーが発生しました

メソッド 'System.Linq.Enumerable.Select(System.Collections.Generic.IEnumerable, System.Func)' の型引数は、使用法から推測できません。型引数を明示的に指定してみてください。

この foreach ループを、IEnumerable コレクション内の各オブジェクトに対してメソッドを実行する linq クエリに変換するにはどうすればよいですか?

4

7 に答える 7

18

I think what you need is the ForEach method ;)

mpwrapper.parser.Discoveries.ToList().ForEach(s => { solution.AddFile("Discoveries", s.DisplayStringName + ".mpx", s); });
于 2013-07-10T13:45:06.463 に答える
6

問題は Select が値を返す必要があることですが、Linq はコレクションを変更するようには設計されていません。select は、各アイテムの状態変化ではなく、コレクション全体の変換と考えてください。

おそらく、ここでは foreach ループが最適なソリューションです

于 2013-07-10T13:45:03.067 に答える
4

LINQ は Language INtegrated Query の略ですが、実際には何もクエリしていません。

mpwrapper.parser.Discoveriesが の場合、メソッドList<T>を使用できます。ForEachまたは、それが の場合は、IEnumerableいつでも拡張メソッドを追加できForEachますが、これは見た目の小さな変更であり、LINQ とは何の関係もありません。

于 2013-07-10T13:48:41.600 に答える
1

メソッドはList<T>.ForEachトリックを行います。

ただし、このメソッドは にはありませんIEnumerable<T>

于 2013-07-10T13:47:54.843 に答える
1

これを試して:

mpwrapper.parser.Discoveries.ToList()
    .ForEach(s =>
        solution.AddFile("Discoveries", s.DisplayStringName + ".mpx", s));
于 2013-07-10T13:48:18.987 に答える
0

Discovery がリストの場合、次のようにします

mpwrapper.parser.Discoveries.ForEach(discovery => solution.AddFile("Discoveries", discovery .DisplayStringName + ".mpx", discovery);

そうでない場合は、最初にリストに変換してください:)

于 2013-07-10T13:46:30.410 に答える