我有一个XmlTextReader,我在System.Net.ConnectStream中传递它。如果我进入调试器,我可以看到ConnectStream不支持Length属性,这会抛出NotSupportedException。
现在,我将Stream子类化并传入我的类的实例。我的类也在Length的get()访问器上抛出NotSupportedException,但这次我的所有单元测试都因NotSupportedException而失败。
XmlTextReader文档并没有说它需要一个Stream支持长度,并且它可以使用一个不会发生的事情?
(这是.NET 3.5客户端)
答案 0 :(得分:2)
如果Stream
从CanSeek
返回true,则表示支持Length
,SetLength
,Position
和Seek
。有些代码可能会测试CanSeek
并使用结果来优化其行为 - 就像这里的情况一样。当您从true
返回CanSeek
但随后在Length
中抛出异常时,就会打破Stream
的非常合理的合同。
如果您不支持Length
媒体资源,最好从false
返回CanSeek
。