Лучший ответ для Вас является своего рода DVCS (популярные, являющиеся Мерзавец , Подвижный , Darcs, Базар ...). Причина состоит в том, что у Вас есть полная копия целого репозитория на любой машине, которую Вы используете. Я не использовал эти системы лично, таким образом, другие будут лучшими при рекомендации DVCS с маленьким местом и хорошей кросс-платформенной совместимостью.
What you want is this:
int[] dreamX;
private void Form1_Load(object sender, EventArgs e)
{
sumX();
}
private void sumX()
{
dreamX =( from Control control in Controls
where control.GetType() == typeof(TextBox) &&
control.Name.StartsWith("box")
select Convert.ToInt32(((TextBox)control).Text))
.ToArray();
}
The from clause produces a IEnumerable collection. You can convert this to an array with the .ToArray() extension
FirstOrDefault ()
превратит IEnumerable
в int
.
Фактически, это первое появление в outputresult вашего linq-запроса.
Что ж, этот запрос может возвращать более одного значения, поэтому вам нужно использовать либо .Single ()
, .First ()
или .FirstOrDefault ()
методы расширения.
Обратите внимание, что Single ()
будет работать, только если есть ровно один элемент в списке, First ()
будет работать, только если в списке есть хотя бы один элемент. FirstOrDefault ()
возвращается к значению по умолчанию (0), если в списке нет элемента.
В зависимости от того, что именно вам нужно, вам придется выбрать:)
В этом столько всего плохого.
Прежде всего, вы пытаетесь присвоить то, что потенциально множество преобразованных целых чисел, одному целому числу в массиве. Это то, о чем вам сообщает сообщение об ошибке.
Кроме того, нигде в показанном вами коде нет того, что массив когда-либо инициализировался. Так что даже если вы вызовете что-то вроде .FirstOrDefault ()
, вы получите исключение NullReferenceException
. Лучше вообще не использовать архивы, если вы можете помочь. Просто придерживайтесь IEnumerable.
Кроме того, ваш запрос linq имеет дополнительный шаг; вместо того, чтобы проверять тип каждого элемента управления в коллекции Controls, вы должны вызвать его метод .OfType ()
.
Наконец, прелесть linq в том, что вам даже не нужно писать цикл for. Вы можете просто написать один оператор, который оценивает все ваши текстовые поля.
IEnumerable<int> dreamX;
private void Form1_Load(object sender, EventArgs e)
{
sumX();
int totalX = dreamX.Sum();
}
private void sumX()
{
dreamX = from control in Controls.OfType<TextBox>()
where control.Name.StartsWith("box")
select Convert.ToInt32(control.Text);
}