Извлеките файл и сохраните подробные данные о сеансах в сеансе из представления и получите доступ к подробным данным о сеансах из сеанса в другом представлении.
Для кого нужны типы?
Компилятор? Да, конечно. Компилятор использует типы, чтобы повысить вероятность того, что ваша программа будет работать правильно во время выполнения, гарантируя совпадение типов, вы вызываете методы, которые действительно существуют, и передаете им параметры правильного типа. Здесь компилятор проверяет, действительно ли вы возвращаете что-то типа IMyType
.
Редактор? Опять же, да. Редактор использует фоновую компиляцию и информацию о типах, чтобы помочь вам писать код. Когда вы нажмете .
после _container
он использует информацию о типе, чтобы сообщить вам, что существует метод Resolve
и какие параметры он принимает.
Ты? Не так много.Мы уже видели, что компилятор гарантирует, что вы вернете что-то типа IMyType
, так зачем вам объявлять его как этот тип, когда компилятор может это обработать и проверить за вас? Точно так же редактор расскажет вам о методах контейнера, так зачем вам объявлять, является ли он контейнером Unity или каким-либо другим типом контейнера, если вы уже знаете из имени переменной, что это какой-то контейнер, и из editor, что у него есть метод Resolve
.
Нет проблем с объявлением типов для локальных переменных, но ReSharper говорит вам, что компилятор может обработать это, так что это избыточная информация, и что ваш код может быть более понятным с неявными типами и хорошими именами переменных. Например, цель этого кода менее ясна, чем исходный образец?
public static IMyType GetGateWayManager()
{
var container = GetContainer();
var gateWayManager = container.Resolve<IMyType>();
return gateWayManager;
}
Утвержденный ответ, конечно, корректен и отвечает на вопрос, как описано.
, Но - я действительно хотел поднять случай, где Вы имеете к неявная типизация использования: когда переменная представляет анонимный тип.
Рассматривают этот код:
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 (который является, где я получил тот пример)
Возможно это ReSharper.
ReSharper рекомендует использовать var
, когда тип переменной виден в коде. В вашем примере мы видим, что _gateWayManager
будет иметь тип IMyType
, тогда мы используем ключевое слово var
для неявного ввода переменной. _container
будет явно указан в коде, потому что мы не можем сказать, объект какого типа будет возвращен GetContainer()
Вероятно, это не редактор VS, а ReSharper, который дает вам это сообщение. Это больше вопрос вкуса, чем практики. Но как только вы привыкнете к ключевому слову var, оно начнет вам нравиться все больше и больше. По крайней мере, я научился любить его.