2011-05-12 5 views
3

通常は静的にチェックされた割り当てがあるようです。私はこの場合の利点を確信していません。私は何が欠けていますか?foreachを可変型にキャストすることの背後にある考え方は何ですか?

+1

もっと明示できますか? – Adi

+1

@Adi:Foreachは非ジェネリックな 'IEnumerable'で動作し、暗黙の変換を追加します。私はこれがDejasがここに言及しているものだと信じています... –

+0

Meh ... 'var'を使う - 問題は蒸発する(正しい/ no-opの割り当て以外は何もできない) –

答えて

3

foreachは、ジェネリックスの前に設計されていますが、これは.NET 2.0まで存在しませんでした。 .NET 1.1では、コレクションクラスを使用した場合、IEnumeratorインターフェイスのCurrentプロパティは常にSystem.Objectを返します。

foreach(string item in collection) 

を代わりに明示的に記述することで:キャストを行う、あなたが書くことができますforeachを有することにより

確か
foreach(object temp in collection) 
{ 
    string item = (string)temp; 

は、.NET 2で、これはもう本当に問題ではありません。

1

foreachの履歴は、一般的なIEnumerableより前です。したがって、ArrayListなどのコレクションを列挙することが容易になりました。 .NETには一般的なコレクションがあり、ArrayListはまれにしか使用されていません。フリーキャスティングは、フィーチャが今追加された場合に設計された方法とのインピーダンスの不一致のようです。

しかし、この機能が追加されたので、人々はジェネリックコレクションでもそれを使用して、自分が望むタイプにキャストして、数行のコードを避けることができます。これは、それがArrayList日にどのように使用されたかからあまり離れていません。

関連する問題