为什么 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 为真,则假定 Length
、SetLength
、Position
和 Seek
都支持。一些代码可能会测试 CanSeek
并使用结果来优化它的行为——这里似乎就是这种情况。当您从 CanSeek
return true
但随后在 Length
中抛出异常时,这违反了 Stream
.
如果不能支持Length
属性,最好从CanSeek
false
return.
我有一个 XmlTextReader,我在 System.Net.ConnectStream 中传递它。如果我进入调试器,我可以看到 ConnectStream 不支持长度 属性,这会引发 NotSupportedException。
现在,我子 class 流并传入我的 class 的一个实例。我的 class 还在 Length 的 get() 访问器上抛出 NotSupportedException,但这次我的所有单元测试都因 NotSupportedException 而失败。
XmlTextReader 文档没有说它需要支持长度的流,而且它显然可以使用不支持长度的流 - 这是怎么回事?
(这是 .NET 3.5 客户端)
如果 CanSeek
中的 Stream
return 为真,则假定 Length
、SetLength
、Position
和 Seek
都支持。一些代码可能会测试 CanSeek
并使用结果来优化它的行为——这里似乎就是这种情况。当您从 CanSeek
return true
但随后在 Length
中抛出异常时,这违反了 Stream
.
如果不能支持Length
属性,最好从CanSeek
false
return.