2010-05-16 11 views
4

Можно создать дубликат:
What’s the point of the var keyword?Когда должен использоваться тип var в C#?

Что такое var типа и его следует использовать в C#? Когда его следует использовать?

Можете ли вы указать тип var для параметров для метода?

+1

Duplicate? http: // stackoverflow.com/questions/1148145/var-keyword-in-c-3-0-closed http://stackoverflow.com/questions/633474/c-do-you-use-var http://stackoverflow.com/ search? q = c% 23 + var –

+0

Я не был доволен ответами на эти вопросы. – CJ7

ответ

3

var не является типом, это инструкция для компилятора, чтобы он мог найти правильный тип для использования.

Это означает, что нет никакой разницы к выходу из следующих двух линий:

var s = "Test"; 
string s = "Test"; 

Что касается, когда использовать его, вам придется придумать свои собственные правила. Существует очень мало вещей, которые вы можете сделать с var, что вы не можете сделать с определенным именем типа, но есть одно: анонимные типы.

Вы можете сделать:

var x = new { A = 10 }; 

, но вы не можете прийти с сильным типом для этого, так как он не имеет типа, известный во время компиляции, а не компилятор создаст тип во время компиляции, а затем var будет использовать этот тип.

Это то, что var было создано для поддержки того, что он также может использоваться без анонимных типов, это бонус, но вам придется составлять свои собственные правила, когда их использовать в этих случаях.

Лично я использую только его, когда тип легко считывается из исходного кода, так что я хотел бы использовать его для:

var dict = new Dictionary<int, string>(); 
var stream = new FileStream(...); 

но не для:

var dict = GetDataStructure(); 
var stream = OpenFileForReading(); 
6

вар не тип. Это удобная короткая ручная запись, которая экономит вам много набрав. Следующие два объявления эквивалентны:

Dictionary<string,List<int>> dic = new Dictionary<string,List<int>>(); 

и

var dic = new Dictionary<string,List<int>>(); 

Как вы можете видеть, это экономит печатая и легче читать. И если вы хотите изменить тип данных, вам нужно изменить правую часть.

Но где мне очень нравится больше всего в Еогеаспе петля:

foreach (var item in someList) 

Здесь элемент автоматически принимает правильный тип, в зависимости от типа someList и позволяет изменять тип someList без имеющий к измените объявление позиции.

Вкратце: var GREAT и его следует использовать.

EDIT: Нет, вы не можете указать var как параметр функции. Думаю, самое близкое к тому, что вы можете получить, это дженерики. И я также совсем забыл упомянуть анонимных типов. С ними у вас есть, чтобы использовать var.

4

Это часть языка, поэтому да, его следует использовать. Однако это не тип, но означает местозаполнитель для фактического типа, определенного компилятором.

Когда вы должны использовать его? Это было предложено до, во много раз:

+0

Наверняка это не считается хорошим программированием. – CJ7

+3

@Craig Johnston - Как и все другие конструкторы программирования, это должно быть использовано в правильных обстоятельствах. – Oded

0

Ну, как уже упоминалось ранее вар краткое обозначение имени типа любой переменной. Что касается меня, я нахожу, что var используется многими разработчиками, и я думаю, что var делает код менее читаемым. Но один случай, когда u должен использовать его, определенно является переменным анонимного типа.

2

Мы склонны использовать его при взаимодействии со всеми нашими отечественными библиотеками.

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

Мы также используем его большую часть времени с платформой .NET.

Однако мы внесли прямой запрет на использование его с родными типами, такими как int, string, bool и т. Д., Потому что не всегда ясно, какой тип переменной в этих случаях.

0

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

var x = new Widget(); //ok 
var y = Customer.Create(); // ok 

var z = DoSomething(); //not ok 
0

Некоторых ответов ввести Anonymous Types.

Ключевое слово var на MSDN.

Знайте, что var не является типом, а заполнителем и может использоваться только в рамках методов или свойств (определение локальной переменной). Вы не можете использовать его в определении локального члена (частные члены класса), и вы не можете определять метод, который должен возвращать какой-либо тип, как generics, где вы можете использовать любое имя, кроме var (или любое другое зарезервированное ключевое слово) как так:

public IList<var> GetItems() { // Here the compiler will complain about the context of using `var` keyword within a local variable definition only. 
} 

public IList<T> GetItems() { // Here, we're talking about generics. 
} 

Итак, вот основные правила, чтобы следовать, используя ключевое слово УАК:

  1. Локальная переменная определение только;
  2. Использовать var с анонимными типами (например, запрос Linq);
  3. Не путать с типичными типами;