2013-12-01 2 views
-1

Мне нужно, чтобы числа, добавленные пользователем, добавлены. Цифры будут поступать из одного текстового поля и разделяются запятой. примером чисел, которые можно использовать, является 7,9,10,2,18,6.Как добавить числа в строку, разделенные разделителем

Вот мой код до сих пор

private void calculateButton_Click(object sender, EventArgs e) 
    { 
     string str = inputNumbTextBox.Text; 
     char[] delim = { ',' }; 
     string[] tokens = str.Split(delim); 

     if (char.IsDigit(str, 0)) 
     { 
     } 
     else 
     { 
      MessageBox.Show("Please enter a number"); 
     } 
    } 

Спасибо заранее.

+8

Что вы хотите сказать? У вас уже есть все числа в «токенах». –

+1

Прокрутите маркеры, преобразуйте числа в ints и добавьте их. Вы уже сделали тяжелую часть. –

ответ

1

использование int.TryParse вместо char.IsDigit:

int sum = 0; 
string[] tokens = str.Split(delim); 
foreach(string str in tokens) 
{ 
    int value = 0; 
    if (int.TryParse(str, out value)) 
    { 
     sum += value; 
    } 
} 
+0

Возможно, вы захотите добавить 'else', чтобы пользователь знал, что одно значение не может быть преобразовано. – Harrison

0

Это работает для меня:

var text = "7,9,10,2,18,6"; 
var sum = 
    text 
     .Split(new [] { ',' }) 
     .Select(x => int.Parse(x.Trim())) 
     .Sum(); 

я получаю результат 52.

Я обычно иду один шаг дальше и определить очистку функционируют так:

Func<string, int?> clean = x => 
{ 
    var r = (int?)null; 
    int v; 
    if (int.TryParse(x.Trim(), out v)) 
    { 
     r = v; 
    } 
    return r; 
}; 

Тогда я мог бы выделить любую логику выделения, необходимую для проверки ввода. Теперь мой суммирующий запрос будет выглядеть так:

var sum = 
    text 
     .Split(new [] { ',' }) 
     .Select(x => clean(x)) 
     .Where(x => x.HasValue) 
     .Sum(); 
Смежные вопросы