-2

「入力文字列が正しい形式ではありませんでした」というエラーが表示されます..... if else 計算を実行し、その結果をラベルに入力すると、変数は 10 進数として宣言され、次に ToString('C') がラベル...

List<string> moneyWon = new List<string>();

     private void calculateAmountWon()
     {
         moneyWon.Add(amountWonlabel.Text);

         decimal won = moneyWon.Sum(str => Convert.ToInt32(str));             

         moneyWonLabel.Text = won.ToString("C");
      }

    private void button2_Click(object sender, EventArgs e)
    {
        this.Close();
    }
4

2 に答える 2

1

そのエラーをスローする唯一のものはConvert.ToInt32(str)呼び出しです。リスト内の項目の 1 つがmoneyWon有効なint値ではありません。

おそらく、 として宣言moneyWonし、すべての値をではなくList<int>として保存する必要があります。すべてを文字列として保存し、必要なときに変換するのは意味がありません。intstringint

于 2014-10-28T22:20:51.167 に答える
0

あなたが出力しているものに基づいて、文字列は通貨記号と小数点以下 2 桁の通貨としてフォーマットされていると想定しています。その場合は、解析を次のように変更できます。

decimal won = moneyWon.Sum(str => decimal.Parse(str, NumberStyles.Currency));

無効な形式に対しては依然として脆弱ですが、値がすべてプログラムで設定されている場合、それらは予測可能であるはずです。

別のオプションは、数値型のリストを使用して前もって解析することです。

List<decimal> moneyWon = new List<decimal>();

private void calculateAmountWon()
{
     moneyWon.Add(decimal.Parse(amountWonlabel.Text, NumberStyles.Currency));

     decimal won = moneyWon.Sum();             

     moneyWonLabel.Text = won.ToString("C");
}
于 2014-10-28T22:22:45.813 に答える