我如何使用System.Net.ConnectStream?

JMK*_*JMK 1 c# correctness

我试图了解一些前任代码,他们帮助我们使用'var'来声明一切.

我有一个使用声明如下:

using (var postStream = request.GetRequestStream())
{
    postStream.Write(byteData, 0, byteData.Length);
}
Run Code Online (Sandbox Code Playgroud)

当我在这里放置断点时,postStream在Autos窗口中显示为System.Net.ConnectStream.而不是'var'我想使用'ConnectStream',但编译器不喜欢这样.

我错过了什么,为什么我不能这样写我的代码:

using (ConnectStream postStream = request.GetRequestStream())
{
    postStream.Write(byteData, 0, byteData.Length);
}
Run Code Online (Sandbox Code Playgroud)

我知道这是微不足道的,但我总是被告知不要使用"变种",除非你有特别的理由这样做(如使用LINQ打交道时).我错了吗?

Tho*_*que 10

ConnectStream是一个内部类,您不能显式使用它.但这并不重要,因为你不需要知道它的实际类型是ConnectStream:你需要知道的是它是一个Stream(声明的返回类型GetRequestStream),实际的实现并不重要.

如果要明确指定类型,只需像这样写:

using (Stream postStream = request.GetRequestStream())
{
    postStream.Write(byteData, 0, byteData.Length);
}
Run Code Online (Sandbox Code Playgroud)

(但它与使用的含义完全相同var)

  • +1"因为你不需要知道它的实际类型是" - "所有你需要知道的是它是一个流." (6认同)
  • @JimmyHoffa,有一个CanSeek属性必须为true才能访问Length属性,否则会抛出NotSupportedException.[Stream.Length文档](http://msdn.microsoft.com/en-us/library/system.io.stream.length.aspx)中记录了此异常.ConnectStream确实尊重这个合约,所以我不认为它违反了LSP. (3认同)