为什么XmlTextReader在调用不受支持的Stream.Length时失败?

时间:2015-10-29 19:33:29

标签: c# .net xmltextreader

我有一个XmlTextReader,我在System.Net.ConnectStream中传递它。如果我进入调试器,我可以看到ConnectStream不支持Length属性,这会抛出NotSupportedException。

现在,我将Stream子类化并传入我的类的实例。我的类也在Length的get()访问器上抛出NotSupportedException,但这次我的所有单元测试都因NotSupportedException而失败。

XmlTextReader文档并没有说它需要一个Stream支持长度,并且它可以使用一个不会发生的事情?

(这是.NET 3.5客户端)

1 个答案:

答案 0 :(得分:2)

如果StreamCanSeek返回true,则表示支持LengthSetLengthPositionSeek。有些代码可能会测试CanSeek并使用结果来优化其行为 - 就像这里的情况一样。当您从true返回CanSeek但随后在Length中抛出异常时,就会打破Stream的非常合理的合同。

如果您不支持Length媒体资源,最好从false返回CanSeek