0

にすべてを合計すると問題が発生bx3.textt2.textます。bx3.text最初にスペースで分割します

    private void total()
    {
        string[] ps = bx3.Text.Split(new string[] {" "}, StringSplitOptions.None );
        t2.Text = ps.Select(x => Convert.ToInt32(x)).Sum().ToString();
    }

試してみましたがt2.text = ps[1]、表示された数字は正しかったです。しかし、すべてを合計しようとすると、エラーが発生しました

「入力文字列が正しい形式ではありませんでした」(x => Convert.ToInt32(x))

bx3.textは、単一のスペースで区切られたユーザー入力番号でいっぱいです ""

4

2 に答える 2

2

これを試して:

 string output = ps.Select(x =>
                                { 
                                    int myInt = 0;
                                    int.TryParse(x, out myInt);
                                    return myInt;
                                })
                                .Sum().ToString();

上記のコードは、ps配列内のすべての整数を合計し、すべての非整数値を省略します。

最初のシナリオ:xが整数の場合(x = 1)

  int myInt = 0;
  int.TryParse(x, out myInt); // change value of myInt to 1, because x is integer
  return myInt; // return 1

2番目のシナリオ:xが整数でない場合(x = "aaa")

  int myInt = 0;
  int.TryParse(x, out myInt); // don't change value of myInt, because x is not integer
  return myInt; // return 0

xが整数関数でない場合、TryParseは常にmyIntの値をゼロに設定します(msdn doc)。

于 2012-12-09T10:30:37.423 に答える
1

文字列に無効な文字が含まれています。
したがって、bx3.Text = "1 2 3 4 5"の内容であれば、正しく機能します。

つまり、

        bx3.Text = "1 2 3 4 5";
        string[] ps = bx3.Text.Split(new string[] {" "}, StringSplitOptions.None );
        t2.Text = ps.Select(x => Convert.ToInt32(x)).Sum().ToString();
         Console.WriteLine(t2.Text);

印刷され15ます。
を使用して無効な文字列を除外できますTryParse

このような:

            string bx3 = "1 2 3 4 5abc d e 6";
            string[] ps = bx3.Split(new string[] { " " }, StringSplitOptions.None);
            int a =0;
            Console.WriteLine(ps.Where(x=>Int32.TryParse(x, out a)).Select(x => Int32.Parse(x)).Sum().ToString());   

印刷します16

于 2012-12-09T10:29:19.580 に答える