トップ回答者
ジェネリック 型 'System.Collections.Generic.IEnumerator<T>' の使用 がよくわかりません。

質問
-
↓のリンクで、試したのですが、解りません。
http://msdn.microsoft.com/ja-jp/academic/cc998633.aspx
エラー 10 ジェネリック 型 'System.Collections.Generic.IEnumerator<T>' の使用には、'1' 型の引数が必要です。 D:\My Documents\Visual Studio 2005\Projects\MSDNAA\MSDNAA\Form1.cs 43 13 MSDNAA
というエラーが出て、これは.Netの初心者だからだと自分がそうなんだと諦めきれません。
よろしくご指導のほどお願いします。
回答
-
多分、ソースファイル冒頭の using の中に、
using System.Collections;
が抜けているのが原因かと。
デフォルトのテンプレートファイルには、上記名前空間は using されていませんが System.Collections.Generic 名前空間は using されています。
System.Collections 名前空間には IEnumerator インターフェイスが定義されており、System.Collections.Generic 名前空間には IEnumerator<T> インターフェイスが定義されています。
本来クラス名には System.Collections.IEnumerator とか System.Collections.Generic.IEnumerator<int> といった記述が必要ですが、毎回それだと長すぎるので、ソースファイル冒頭で using することで、その名前空間の記述は省略することができるようになります。
で、System.Collections.Generic が using されていて System.Collections が using されていないと、IEnumerator という名前が出てきたとき「これは System.Collections.Generic.IEnumerator のことだな」とコンパイラは判断します。で、System.Collections.Generic.IEnumerator は ジェネリック型のため、IEnumerator<何かの型> という記述が必須になり、この「何かの型」が書かれてないよ、というエラーになります。
System.Collections が using されているなら、IEnumerator という型が出てきたとき、<何かの型>が書かれていないのでジェネリック型ではない=System.Collections.Generic.IEnumerator ではない、と判断できるので、System.Collections の方の IEnumerator であることが自明と言うことになります。
- 回答としてマーク 菊地俊介 2010年4月20日 8:01
-
参考にされているサンプルはかなり古いですね(.NET, C# とも初期
版に近いもの?)。古いから動かないというわけではないですが、.NET2.0 の新しいクラ
スライブラリ(WebBrowser クラスなど。下記リンク参照)、C#2.0
で使えるようになったジェネリック型を使って、サンプルを書き換え
てみてはいかがでしょう?WebBrowser クラス
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.webbrowser(VS.80).aspxHtmlDocument クラス
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.htmldocument(v=VS.80).aspxそうすれば、Visual Studio の機能を生かして、労力は少なく、コー
ドももっと簡単に書け、間違いも少なくなるはずです。また、COM コンポーネントは使い方のドキュメントを見つけるにも苦
労しますが、.NET Framework のクラスライブラリなら、親切丁寧に
使い方を解説したドキュメント、Web ページが多数見つかるというメ
リットもあります。SHDocVw.dll などの使い方を勉強しているとか、互換性の問題があっ
て新しいバージョンは使えないということでしたら失礼しました。- 回答としてマーク 菊地俊介 2010年4月20日 8:01
-
using System.Collections;
を追記したら、エラーはでなくなり、解決しました。
ありがとうございました。
- 回答としてマーク daichan4520021001 2010年4月27日 11:49
すべての返信
-
多分、ソースファイル冒頭の using の中に、
using System.Collections;
が抜けているのが原因かと。
デフォルトのテンプレートファイルには、上記名前空間は using されていませんが System.Collections.Generic 名前空間は using されています。
System.Collections 名前空間には IEnumerator インターフェイスが定義されており、System.Collections.Generic 名前空間には IEnumerator<T> インターフェイスが定義されています。
本来クラス名には System.Collections.IEnumerator とか System.Collections.Generic.IEnumerator<int> といった記述が必要ですが、毎回それだと長すぎるので、ソースファイル冒頭で using することで、その名前空間の記述は省略することができるようになります。
で、System.Collections.Generic が using されていて System.Collections が using されていないと、IEnumerator という名前が出てきたとき「これは System.Collections.Generic.IEnumerator のことだな」とコンパイラは判断します。で、System.Collections.Generic.IEnumerator は ジェネリック型のため、IEnumerator<何かの型> という記述が必須になり、この「何かの型」が書かれてないよ、というエラーになります。
System.Collections が using されているなら、IEnumerator という型が出てきたとき、<何かの型>が書かれていないのでジェネリック型ではない=System.Collections.Generic.IEnumerator ではない、と判断できるので、System.Collections の方の IEnumerator であることが自明と言うことになります。
- 回答としてマーク 菊地俊介 2010年4月20日 8:01
-
参考にされているサンプルはかなり古いですね(.NET, C# とも初期
版に近いもの?)。古いから動かないというわけではないですが、.NET2.0 の新しいクラ
スライブラリ(WebBrowser クラスなど。下記リンク参照)、C#2.0
で使えるようになったジェネリック型を使って、サンプルを書き換え
てみてはいかがでしょう?WebBrowser クラス
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.webbrowser(VS.80).aspxHtmlDocument クラス
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.htmldocument(v=VS.80).aspxそうすれば、Visual Studio の機能を生かして、労力は少なく、コー
ドももっと簡単に書け、間違いも少なくなるはずです。また、COM コンポーネントは使い方のドキュメントを見つけるにも苦
労しますが、.NET Framework のクラスライブラリなら、親切丁寧に
使い方を解説したドキュメント、Web ページが多数見つかるというメ
リットもあります。SHDocVw.dll などの使い方を勉強しているとか、互換性の問題があっ
て新しいバージョンは使えないということでしたら失礼しました。- 回答としてマーク 菊地俊介 2010年4月20日 8:01
-
using System.Collections;
を追記したら、エラーはでなくなり、解決しました。
ありがとうございました。
- 回答としてマーク daichan4520021001 2010年4月27日 11:49