1
    private void updateButton_Click(object sender, EventArgs e)
    {
        //custID.Text = customers[id].ID.ToString();
        customers[id].Name = custName.Text.ToString();
        customers[id].Suburb = custSuburb.Text.ToString();
        customers[id].Balance = custBal.Text;
        customers[id].Year_used = custYear.Text;
    }

}


public class Customer
{
    protected string id;
    protected string name;
    protected string suburb;
    protected double balance;
    protected double year_used;

    public string ID
    {
        get { return id; }
    }

    public string Name
    {
        get { return name; }
        set { value = name; }
    }

    public string Suburb
    {
        get { return suburb; }
        set { value = suburb; }
    }

    public double Balance
    {
        get { return balance; }
        set { value = balance; }
    }

    public double Year_used
    {
        get { return year_used; }
        set { value = year_used; }
    }


    public Customer(string id, string name, string suburb, double balance, double year_used)
    {
        this.id = id;
        this.name = name;
        this.suburb = suburb;
        this.balance = balance;
        this.year_used = year_used;
    }

}

当我尝试运行代码时似乎出现此错误?似乎是什么问题,我改变了所有有 int 的东西。

也:

        customers[id].Balance = custBal.Text;
        customers[id].Year_used = custYear.Text;

custBal 的正确代码是什么。和 custYear。让它显示在我的表单上?有任何想法吗?

4

5 回答 5

2

假设您知道它们包含格式正确的数字,您想要的是解析每个字符串中包含的数值并将其分配给双精度类型变量(这涉及将您的数字表示形式作为字符串转换为另一个不同的二进制内容:双),不投它(它没有)。尝试:

customers[id].Balance = Double.Parse(custBal.Text);
customers[id].Year_used =  Double.Parse(custYear.Text);

或者,如果您想针对返回的布尔值测试解析是否成功,而不是执行异常处理来测试 FormatException,您可以改用 TryParse:

if (!Double.TryParse(custBal.Text, customers[id].Balance))
   Console.WriteLine("Parse Error on custBal.Text");
if (!Double.TryParse(custYear.Text, customers[id].Year_used))
   Console.WriteLine("Parse Error on custYear.Text");

更多信息:

http://msdn.microsoft.com/en-us/library/t9ebt447%28v=vs.80%29.aspx

http://msdn.microsoft.com/en-us/library/994c0zb1.​​aspx

于 2012-10-07T12:03:53.053 回答
2

您的用户正在输入余额并正在输入文本,那么您如何知道文本可以用数字表示?C# 不会让您将字符串隐式转换为双精度,因为如果不对字符串做出实质性假设,就没有唯一的方法可以做到这一点,并且隐式转换永远不应引发异常(框架设计指南),因此最好不要提供隐式完全转换。

例如,既然是余额,那么如果用户输入“(100.25)”或“-100.25”或“-$100.25”或“-€100,25”或“负一百二十五美分”怎么办?这些是有效的字符串,那么如何将它们转换为双精度?

答案是没有一个正确的答案:您可以以任何对您有意义的方式将字符串映射为 double。当然,您可以编写自己的表单函数,Func<String, double>但 .Net 框架提供了一些函数来实现最常见和直观的转换。

其他人已经发布了double.Parsedouble.TryParse所以我想补充一下,以确保也调查一下NumberStylesIFormatProvider如果有必要的话。

于 2012-10-07T12:20:11.237 回答
1

您应该使用Double.TryParse()将字符串转换为 Double。您不能将字符串保存在 Double 数据类型上,并且 c# 中没有可用的隐式转换来做到这一点

Double result;
Double.TryParse(custBal.Text,out result);
于 2012-10-07T12:03:15.523 回答
1

您不能直接分配string给 a double。您需要解析字符串以将它们分配给双精度数,如下所示:

customers[id].Balance = double.Parse(custBal.Text);
customers[id].Year_used = double.Parse(custYear.Text);
于 2012-10-07T12:04:04.880 回答
0

将 'String' 转换为 'Double' 的最佳方法是使用 TryParse,如下所示:

int result;

if (double.TryParse(custBal.Text, out result))
    customers[id].Balance = result;
if (double.TryParse(custYear.Text, out result))
    customers[id].Year_used = result;
于 2012-10-07T12:11:33.887 回答