メソッドForEach()
をSelect()
などと置き換えて、ネスト拡張メソッドを使用して次のコードを1つの文字列に書き込むことはできますか?または、アルゴリズムを改善する別の方法がありますか?ネストされたForEachを置換する場合は選択
var list = new List<IStatementParser>();
System.IO.Directory.GetFiles(path, "*.dll")
.ForEach(f => System.Reflection.Assembly.LoadFrom(f)
.GetTypes()
.Where(t => !t.IsInterface && typeof(IFoo).IsAssignableFrom(t))
.ForEach(t => list.Add((IFoo)Activator.CreateInstance(t))));
return list.ToDictionary(k => k.Name, v => v.GetType());
それはIFoo
を実装し、文字列がIFoo.Name
ToDictionary呼び出しの値デリゲートとしてfoo => foo.GetType()パラメータが必要です。そうでなければ、素晴らしい答えです。 –
上記の「let」の使用方法を明確にするだけで、私はあなたの答えを受け入れる準備ができています。そして、この辞書はFooFactoryによってIFooのインスタンスを作成するために使用されるため、Dictionary、Dictionary 型= IFoo(私は最初の投稿を編集しました)が必要です。現在のセッションでは、まったく発生しない可能性があります。 –
abatishchev
.GetType()呼び出しを含むように編集されました。 @パベルの答えのlet節は、スタイルのものです。あなたはそれを持つ必要はありませんが、彼はそれをより明確に認識しているかもしれません。 –