Почему я должен использовать неявно типизированные локальные переменные?

Извлеките файл и сохраните подробные данные о сеансах в сеансе из представления и получите доступ к подробным данным о сеансах из сеанса в другом представлении.

13
задан 5 revs, 4 users 49% 7 May 2018 в 21:45
поделиться

5 ответов

Для кого нужны типы?

Компилятор? Да, конечно. Компилятор использует типы, чтобы повысить вероятность того, что ваша программа будет работать правильно во время выполнения, гарантируя совпадение типов, вы вызываете методы, которые действительно существуют, и передаете им параметры правильного типа. Здесь компилятор проверяет, действительно ли вы возвращаете что-то типа IMyType.

Редактор? Опять же, да. Редактор использует фоновую компиляцию и информацию о типах, чтобы помочь вам писать код. Когда вы нажмете . после _container он использует информацию о типе, чтобы сообщить вам, что существует метод Resolve и какие параметры он принимает.

Ты? Не так много.Мы уже видели, что компилятор гарантирует, что вы вернете что-то типа IMyType, так зачем вам объявлять его как этот тип, когда компилятор может это обработать и проверить за вас? Точно так же редактор расскажет вам о методах контейнера, так зачем вам объявлять, является ли он контейнером Unity или каким-либо другим типом контейнера, если вы уже знаете из имени переменной, что это какой-то контейнер, и из editor, что у него есть метод Resolve.

Нет проблем с объявлением типов для локальных переменных, но ReSharper говорит вам, что компилятор может обработать это, так что это избыточная информация, и что ваш код может быть более понятным с неявными типами и хорошими именами переменных. Например, цель этого кода менее ясна, чем исходный образец?

public static IMyType GetGateWayManager()
{
    var container = GetContainer();
    var gateWayManager = container.Resolve<IMyType>();
    return gateWayManager;
}
13
ответ дан 25 October 2019 в 20:53
поделиться

Утвержденный ответ, конечно, корректен и отвечает на вопрос, как описано.

, Но - я действительно хотел поднять случай, где Вы имеете к неявная типизация использования: когда переменная представляет анонимный тип.

Рассматривают этот код:

var upperLowerWords =
    from w in words
    select new { Upper = w.ToUpper(), Lower = w.ToLower() };

, Что тип upperLowerWords, как предполагается? Вы не можете сказать, потому что нет никакого явный тип, который соответствует тому, что возвращается - но это - тип, который может распознать компилятор. И на самом деле это делает.

Для ссылки: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/implicitly-typed-local-variables (который является, где я получил тот пример)

0
ответ дан 25 October 2019 в 20:53
поделиться

Возможно это ReSharper.

ReSharper рекомендует использовать var, когда тип переменной виден в коде. В вашем примере мы видим, что _gateWayManager будет иметь тип IMyType, тогда мы используем ключевое слово var для неявного ввода переменной. _container будет явно указан в коде, потому что мы не можем сказать, объект какого типа будет возвращен GetContainer()

5
ответ дан 25 October 2019 в 20:53
поделиться

Это Resharper предупреждает вас, а не редактор VS.

1
ответ дан 25 October 2019 в 20:53
поделиться

Вероятно, это не редактор VS, а ReSharper, который дает вам это сообщение. Это больше вопрос вкуса, чем практики. Но как только вы привыкнете к ключевому слову var, оно начнет вам нравиться все больше и больше. По крайней мере, я научился любить его.

2
ответ дан 25 October 2019 в 20:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: