C# 如何添加多个文本框数字,并将总和存储为double-in变量
这是我的问题。我希望能够将10个文本框的值相加成一个双类型变量 问题是文本框值由数据库填充,并且不总是填充。我希望能够对所有10的值求和,而不必强制文本框中为空的默认值为零C# 如何添加多个文本框数字,并将总和存储为double-in变量,c#,winforms,textbox,C#,Winforms,Textbox,这是我的问题。我希望能够将10个文本框的值相加成一个双类型变量 问题是文本框值由数据库填充,并且不总是填充。我希望能够对所有10的值求和,而不必强制文本框中为空的默认值为零 amount = Convert.ToDouble(amount1TextBox.Text + amount2TextBox.Text + amount3TextBox.Text + amount4TextBox.Text + amount5TextBox.Text + amount6TextBox.Text + amoun
amount = Convert.ToDouble(amount1TextBox.Text + amount2TextBox.Text + amount3TextBox.Text + amount4TextBox.Text + amount5TextBox.Text + amount6TextBox.Text + amount7TextBox.Text + amount8TextBox.Text + amount9TextBox.Text + amount10TextBox.Text);
很抱歉,您需要检查每个文本框的值。将其作为一个单独的功能会更干净一些:
public double GetValue(string text)
{
if(string.IsNullOrEmpty(text))
return 0;
double value;
if(double.TryParse(text, out value))
return value;
// not parsable
return 0;
}
打电话
amount =
GetValue(amount1TextBox.Text) +
GetValue(amount2TextBox.Text) +
GetValue(amount3TextBox.Text) +
GetValue(amount4TextBox.Text) +
GetValue(amount5TextBox.Text) +
GetValue(amount6TextBox.Text) +
GetValue(amount7TextBox.Text) +
GetValue(amount8TextBox.Text) +
GetValue(amount9TextBox.Text) +
GetValue(amount10TextBox.Text);
很抱歉,您需要检查每个文本框的值。将其作为一个单独的功能会更干净一些:
public double GetValue(string text)
{
if(string.IsNullOrEmpty(text))
return 0;
double value;
if(double.TryParse(text, out value))
return value;
// not parsable
return 0;
}
打电话
amount =
GetValue(amount1TextBox.Text) +
GetValue(amount2TextBox.Text) +
GetValue(amount3TextBox.Text) +
GetValue(amount4TextBox.Text) +
GetValue(amount5TextBox.Text) +
GetValue(amount6TextBox.Text) +
GetValue(amount7TextBox.Text) +
GetValue(amount8TextBox.Text) +
GetValue(amount9TextBox.Text) +
GetValue(amount10TextBox.Text);
文本框的扩展方法如何:
namespace System
{
public static class Extensions
{
public static double AsDouble(this TextBox t)
{
double val;
double.TryParse(t.Text, out val);
return val;
}
}
}
然后你可以这样使用它:
var amt = amount1TextBox.AsDouble() +
amount2TextBox.AsDouble() +
amount3TextBox.AsDouble() +
amount4TextBox.AsDouble() +
amount5TextBox.AsDouble() +
amount6TextBox.AsDouble() +
amount7TextBox.AsDouble() +
amount8TextBox.AsDouble() +
amount9TextBox.AsDouble() +
amount10TextBox.AsDouble();
public static double GetAmount(this TextBox t)
{
double result = 0;
double.TryParse(t.Text, out result);
return result;
}
这也意味着,在任何其他时间,您需要将TextBox
的值作为double
直接获取;申请表中的任何表格 对于文本框的扩展方法如何
:
namespace System
{
public static class Extensions
{
public static double AsDouble(this TextBox t)
{
double val;
double.TryParse(t.Text, out val);
return val;
}
}
}
然后你可以这样使用它:
var amt = amount1TextBox.AsDouble() +
amount2TextBox.AsDouble() +
amount3TextBox.AsDouble() +
amount4TextBox.AsDouble() +
amount5TextBox.AsDouble() +
amount6TextBox.AsDouble() +
amount7TextBox.AsDouble() +
amount8TextBox.AsDouble() +
amount9TextBox.AsDouble() +
amount10TextBox.AsDouble();
public static double GetAmount(this TextBox t)
{
double result = 0;
double.TryParse(t.Text, out result);
return result;
}
这也意味着,在任何其他时间,您需要将TextBox
的值作为double
直接获取;申请表中的任何表格 不能添加字符串并期望它们以数字求和。您将仅连接文本
您应该使用检查字符串是否可以被解析:
double d1;
double.TryParse(amount1TextBox.Text, out d1));
double d2
double.TryParse(amount2TextBox.Text, out d2));
// and so on ...
double result = d1 + d2 + .... + d10;
不能添加字符串并期望它们以数字求和。您将仅连接文本
您应该使用检查字符串是否可以被解析:
double d1;
double.TryParse(amount1TextBox.Text, out d1));
double d2
double.TryParse(amount2TextBox.Text, out d2));
// and so on ...
double result = d1 + d2 + .... + d10;
你有两件事要做。首先是对字符串使用+
运算符,它将它们作为字符串连接起来,而不是作为数字求和。所以你需要先把它们转换成数字
当然,所有这些文本框可能会有点臃肿。但听起来你有一些业务逻辑,这可能会使它更容易。您不需要强制文本框显示0
,但可以在没有有效值的情况下将其默认值设置为0
您可以首先为TextBox
创建一个简单的扩展方法,以获取其数值,或者默认值0
。大概是这样的:
var amt = amount1TextBox.AsDouble() +
amount2TextBox.AsDouble() +
amount3TextBox.AsDouble() +
amount4TextBox.AsDouble() +
amount5TextBox.AsDouble() +
amount6TextBox.AsDouble() +
amount7TextBox.AsDouble() +
amount8TextBox.AsDouble() +
amount9TextBox.AsDouble() +
amount10TextBox.AsDouble();
public static double GetAmount(this TextBox t)
{
double result = 0;
double.TryParse(t.Text, out result);
return result;
}
对于任何给定的文本框
,您现在可以通过以下方式轻松获取数值:
amount1TextBox.GetAmount();
这也意味着您可以对它们求和,而不是将它们串联起来,并且不需要将总和转换为double
,因为金额已经是double
s。所以你可以做一些简单的事情如下:
amount = amount1TextBox.GetAmount() +
amount2TextBox.GetAmount() +
//...
amount10TextBox.GetAmount();
你有两件事要做。首先是对字符串使用+
运算符,它将它们作为字符串连接起来,而不是作为数字求和。所以你需要先把它们转换成数字
当然,所有这些文本框可能会有点臃肿。但听起来你有一些业务逻辑,这可能会使它更容易。您不需要强制文本框显示0
,但可以在没有有效值的情况下将其默认值设置为0
您可以首先为TextBox
创建一个简单的扩展方法,以获取其数值,或者默认值0
。大概是这样的:
var amt = amount1TextBox.AsDouble() +
amount2TextBox.AsDouble() +
amount3TextBox.AsDouble() +
amount4TextBox.AsDouble() +
amount5TextBox.AsDouble() +
amount6TextBox.AsDouble() +
amount7TextBox.AsDouble() +
amount8TextBox.AsDouble() +
amount9TextBox.AsDouble() +
amount10TextBox.AsDouble();
public static double GetAmount(this TextBox t)
{
double result = 0;
double.TryParse(t.Text, out result);
return result;
}
对于任何给定的文本框
,您现在可以通过以下方式轻松获取数值:
amount1TextBox.GetAmount();
这也意味着您可以对它们求和,而不是将它们串联起来,并且不需要将总和转换为double
,因为金额已经是double
s。所以你可以做一些简单的事情如下:
amount = amount1TextBox.GetAmount() +
amount2TextBox.GetAmount() +
//...
amount10TextBox.GetAmount();
一点灵气:
amount = Controls.OfType<TextBox>()
.Where(tb => tb.Name.StartsWith("amount"))
.Select(tb => tb.Text)
.Where(s => !String.IsNullOrEmpty(s))
.Sum(s => Int32.Parse(s));
一点灵气:
amount = Controls.OfType<TextBox>()
.Where(tb => tb.Name.StartsWith("amount"))
.Select(tb => tb.Text)
.Where(s => !String.IsNullOrEmpty(s))
.Sum(s => Int32.Parse(s));
使用Linq的乐趣不多
var total = new[]{ amount1TextBox, amount2TextBox ,amount3TextBox, ...}
.Sum(x=> x.AsDouble());
哪里是双重来源。与Linq的小乐趣
var total = new[]{ amount1TextBox, amount2TextBox ,amount3TextBox, ...}
.Sum(x=> x.AsDouble());
我知道你已经选择了一个适合你的答案,但因为你要求举个例子,而且其他人可能需要不同的解决方案,所以我在这里用我的方式
private double GetSum(params TextBox[] arr)
{
double sum = 0;
double temp;
foreach (TextBox txt in arr)
{
double.TryParse(txt.Text,out temp);
sum += temp;
}
return sum;
}
并使用它:
double a = GetSum(new TextBox() { Text = "1" }, new TextBox() { Text = "1" }, new TextBox() { Text = "1" }, new TextBox() { Text = "a" });
就个人而言,我喜欢linq它非常适合数据处理,但不是所有问题,
需要一个复杂的解决方案,我宁愿选择一个简单的、干净的、易于维护且易于他人理解的解决方案。
我知道你已经选择了一个适合你的答案,但因为你要求举个例子,而且因为其他人可能需要不同的解决方案,我会在这里说明
private double GetSum(params TextBox[] arr)
{
double sum = 0;
double temp;
foreach (TextBox txt in arr)
{
double.TryParse(txt.Text,out temp);
sum += temp;
}
return sum;
}
并使用它:
double a = GetSum(new TextBox() { Text = "1" }, new TextBox() { Text = "1" }, new TextBox() { Text = "1" }, new TextBox() { Text = "a" });
就个人而言,我喜欢linq它非常适合数据处理,但不是所有问题,
需要一个复杂的解决方案,我宁愿选择一个简单的、干净的、易于维护且易于他人理解的解决方案。
但是,这只是我:)强制默认值为零有什么问题?你不会得到同样的结果吗?“不强制文本框中为空的默认值为零。”嗯?因为我正在将值保存到另一个数据库中,这会使程序认为值零实际上是一个需要保存的值。这是一个数据库规范化项目。@TimSchmelter,如果有空值,程序将抛出一个错误。如果我在textboxs中添加了一个默认值零,并且该值为null,则不会抛出错误。这种解决方案对我不起作用强制默认值为零有什么问题?你不会得到同样的结果吗?“不强制文本框中为空的默认值为零。”嗯?因为我正在将值保存到另一个数据库中,这会使程序认为值零实际上是一个需要保存的值。这是一个数据库规范化项目。@TimSchmelter,如果有空值,程序将抛出一个错误。如果我在textboxs中添加了一个默认值零,并且该值为null,则不会抛出错误。这个解决方案对我不起作用,我想你不需要Convert.ToDouble
call:)我想你不需要Convert.ToDouble