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

Why does XmlTextReader fail on calling an unsupported Stream.Length?

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

现在,我子 class 流并传入我的 class 的一个实例。我的 class 还在 Length 的 get() 访问器上抛出 NotSupportedException,但这次我的所有单元测试都因 NotSupportedException 而失败。

XmlTextReader 文档没有说它需要支持长度的流,而且它显然可以使用不支持长度的流 - 这是怎么回事?

(这是 .NET 3.5 客户端)

如果 CanSeek 中的 Stream return 为真,则假定 LengthSetLengthPositionSeek 都支持。一些代码可能会测试 CanSeek 并使用结果来优化它的行为——这里似乎就是这种情况。当您从 CanSeek return true 但随后在 Length 中抛出异常时,这违反了 Stream.

如果不能支持Length属性,最好从CanSeekfalsereturn.