Как я могу использовать System.Net.ConnectStream? - PullRequest
1 голос
/ 19 января 2012

Я пытаюсь разобраться с кодом моего предшественника, который, услужливо, использовал 'var', чтобы объявить все.

У меня есть оператор использования, который приведен ниже:

using (var postStream = request.GetRequestStream())
{
    postStream.Write(byteData, 0, byteData.Length);
}

Когда я ставлю точку останова, postStream отображается в окне Autos как System.Net.ConnectStream.Вместо 'var' я хочу использовать 'ConnectStream', но компилятору это не нравится.

Чего мне не хватает, почему я не могу написать свой код так:

using (ConnectStream postStream = request.GetRequestStream())
{
    postStream.Write(byteData, 0, byteData.Length);
}

Я знаю, что это тривиально, но меня всегда учили не использовать 'var', если у вас нет особых причин для этого (например, при работе с LINQ).Я не прав?

Ответы [ 4 ]

9 голосов
/ 19 января 2012

ConnectStream является внутренним классом, вы не можете использовать его явно. Но это не имеет значения, потому что вам не нужно знать, что его фактический тип - ConnectStream: все, что вам нужно знать, это то, что это Stream (тип возврата, объявленный GetRequestStream), фактическая реализация на самом деле не имеет значения.

Если вы хотите явно указать тип, просто напишите его так:

using (Stream postStream = request.GetRequestStream())
{
    postStream.Write(byteData, 0, byteData.Length);
}

(но оно имеет то же значение, что и использование var)

2 голосов
/ 19 января 2012

Великолепный фрагмент из ключевого слова var на сайте InfoQ . Это говорит о том, когда и когда не следует использовать вар. Это не так ясно, как не использовать его, если вы не используете linq, тем более вы используете его, когда вам не нужно привлекать внимание к типу данных и использовать типизированные объекты, когда вам нужно привлечь внимание к типу данных ,

Это одна из вещей личного предпочтения ... но обычно лучшим предпочтением является то, что вашему боссу / руководителю кода / архитектору нравится, когда их кодовая "грамматика" выглядит так, чтобы она была однородной.

1 голос
/ 19 января 2012

Не зная этого фактического API, GetRequestStream() выглядит как фабричный метод, скорее всего, он возвращает базовый класс ConnectStream.

Так что вам придется использовать:

 using (ConnectStream postStream = (ConnectStream) request.GetRequestStream()) { ... }

Обратите внимание, что вы можете просто навести указатель мыши на postStream в редакторе, чтобы увидеть тип времени компиляции.

0 голосов
/ 02 октября 2014

Я повторно использовал один ответ здесь: Как получить размер файла из объекта Microsoft.SharePoint.Client.File?

Это «ответ от« Freejete »и его метода»ReadToEnd 'работал для меня как шарм.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...