DOBON.NET DOBON.NETプログラミング掲示板過去ログ

抽象クラスの初期化について

環境/言語:[Framework1.1 VS.NET2003 #]
分類:[.NET]

現在C#でプログラムを組んでるんですが、抽象クラスを戻り値に持つメソッドの
定義が出来ずに困っております。
具体的にはXmlNodeListを戻り値に持ちたいのですが、現在は該当する値が
無い場合はnullを戻してるのですが、これだと

private XmlNodeList GetList()
null:該当無し、null以外:該当するリストを返す

というメソッドがあると仮定して、
foreach(XmlElement child in GetList() )
{
}

などで参照しようとするエラーになります。
MSが用意している同じようにXmlNodeListを戻り値に持つメソッドだと、該当するデータがない場合はnullじゃなく、値が無い(Count=0)の値がもどってくるようなのでエラーにならずにループには入らないまま終了します。
どなたか抽象クラスを戻り値に使っている方がいましたら、何か方法を教えてください。
自前で XmlNodeList 派生クラスを定義してやるとか。

というか XmlNodeList である必要性はあるんですか?
XmlNode の配列じゃ駄目?
現状ではその XmlNodeList オブジェクトをどうやって GetList メソッド内で用意してるんですか?
■No18393に返信(Hongliangさんの記事)
> 自前で XmlNodeList 派生クラスを定義してやるとか。
そういう手段があるんですか?少し調べてみます。

> というか XmlNodeList である必要性はあるんですか?
> XmlNode の配列じゃ駄目?
ダメ?って言いますか、XmlNodeListクラスを使うのが一番スマートなんで
使いたいのです。

> 現状ではその XmlNodeList オブジェクトをどうやって GetList メソッド内で用意してるんですか?
private XmlNodeList GetList()
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(ファイル名);

//対応するタグのノードを取得する。無い場合はnullがもどってくる
XmlElement xmlTaio = GetNode(xmlDoc, タグ名);
XmlNodeList xmlList = null;
if (xmlTaio != null)
xmlList = xmlTaio.GetElementsByTagName("科目");
return xmlList;
}
現状ではこのようにしてます。
対応するタグを取得できない場合はNullが返ってきますので、そのままGetElementsByTagNameメソッドを使うとエラーになります。
なので苦し紛れで無い場合はXmlNodeListをnullにしています。
XmlNodeListクラスを継承したクラスと、その中のGetEnumeratorメソッドで使用するIEnumeratorクラスを継承したサブクラスの二つを作ることでうまくいきました。
http://msdn2.microsoft.com/ja-jp/library/system.collections.ienumerator(VS.80).aspx

ありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板