私のプロジェクトではMyClass
があり、IMyClass
を実装しています。私は他の項目のリストを変換することによってIMyClass
のリストを返す必要があります。簡単にするために、別のアイテムをそのコンストラクタに渡すだけでを作成できるとします(new MyClass(item)
)。ラムダでキャストするか、IEnumerableをキャストする必要がありますか?
(私の知る限りでは)これは、同じ結果を生成、次の2行を考えてみましょう:オプション#1は、すべての項目をキャストするために、一度、二重の列挙を必要とする私には思える
var option1 = items.Select(item => new MyClass(item)).Cast<IMyClass>().ToList()
var option2 = items.Select(item => new MyClass(item) as IMyClass).ToList()
を私のインターフェースと一度リストを生成する。もし私が正しいなら、オプション2はよりスマートになります。しかし、は、オプション#2のようなコードを使用していませんでした。私は、C#コミュニティの残りの部分が賢明ではないと思うほどスマートではないと思います。
オプション2は審美的に嬉しいですが、それは私だけだと思います。
私の質問は:私の選択肢#2私はそれが良いと思うより良いアイデアですか?私が行方不明になっているか、オプション#1にこだわりたい理由があるのでしょうか?それとも、私が完全に欠けているよりスマートな第3のものがあるときにおそらく2つの愚かなアイデアを比較していますか?
enumerablesが怠惰で構成可能であることを忘れないでください!オプション1は、それが2回列挙されることはありません... –
'MyClass'が' IMyClass'を実装すると、なぜキャストする必要がありますか? –
あなたは推論なしでいつもタイプを綴ることができますか? ToString(); 'IEnumerable'を返します。 –