2015-12-23 5 views
0

У меня есть приложение для регистрации, которое работает неправильно, и я работаю на консольной линии, чтобы проверить свой код. Когда я понял, так как я получаю информацию от COnfigurationManager, я не знаю, что называется переменной в моей FOR Each.Looping in ForEach, но что такое переменная

string machineNamesConfig = ConfigurationManager.AppSettings["MachineNames"]; 
var machineNames = new List<string>(machineNamesConfig.Split(',')); 
machineNames = machineNames.OrderBy(i => i).ToList(); 
foreach (??? m in machineNames) 
{ 

} 
+0

Вы повторяете список строк, поэтому в этом случае это будет строка m в машинных именах. – wentimo

ответ

4

Чтобы ответить на ваш вопрос, переменная называется "м".

Что вы ищете, это тип переменной. Вы можете позволить компилятору сделать вывод, что, используя var, как и в ответе Майка Шварца. Вы можете также использовать string, потому что вы знаете, что machineNames список строк:

foreach (string m in machineNames) 
{ 
    //... 
} 

Тип переменной, объявленной в цикле Еогеасп может быть var, или это может быть тип элемента коллекции вы находитесь итерация, или это может быть любой подтип типа элемента. Там, наверное, не очень хорошая причина это делать, но если вы хотите, вы также можете сделать одно из следующих действий:

foreach (object m in machineNames) { } 
foreach (IEnumerable<char> m in machineNames) { } 

И так далее.

2

Попробуйте это:

foreach (var m in machineNames) 
{ 

} 
1

Вы создаете List<string> во второй строке своего кода, а затем заказываете его, а затем снова создаете список.

После этого тип объектов внутри списка machineNames должен быть string.

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

0

Следующие лучше и предпочтительнее, так как вы повторяете список строк, даже если вы назначаете свои объекты переменной var machineNames, все равно string, просто вы ленитесь, чтобы определить правильную переменную. Кроме того, это имеет смысл, если кто-то взглянет на ваш код, на первый взгляд, он будет знать, что вы итерируете.

foreach (string m in machineNames) 
{ 

} 

следующее также работает.

foreach (var m in machineNames) 
{ 

} 

Краткое примечание: используя var над string нет никакой разницы. Это действительно просто стиль кодирования. Компилятор генерирует то же самое для обоих вариантов. Также нет разницы в производительности.

0

Вы действительно можете сделать все это дело как один лайнер:

foreach (var machineName in ConfigurationManager.AppSettings["MachineNames"].Split(',').OrderBy(i => i)) 
{ 

} 

И как все предложили, вар взаимозаменяемы шпагатом.

+0

'Сплит (',')' отсутствует! – casillas

+0

Право, исправлено, спасибо – Ginandi