XML解析の場所参照を提供できるexcpetionクラスを使用しようとすると、興味深い動作が見つかりました。コンパイラは、XmlReaderをパラメータとして渡そうとしたときに、インターフェイスを消費するオーバーロードとSystem.Exceptionを必要とするオーバーロードのどちらかを選択できませんでした。
詳細は次のとおりです。
//exception overloads:
public FilterXmlParseException(string message, Exception innerException)
: base(message, innerException) { }
public FilterXmlParseException(string message, IXmlLineInfo lineInfo) {...}
//Usage:
XmlReader reader = ...
IXmlLineInfo lineinfo = (IXmlLineInfo)reader;
//fails
throw new FilterXmlParseException("<Filter> element expected", reader);
//ok
throw new FilterXmlParseException("<Filter> element expected", lineinfo);
そして、正しいオーバーロードを選択できなかったために失敗しますが、なぜですか?XmlReaderがインターフェースをサポートしており、System.Exceptionから継承されていないことがわかります。