Cannot implicitly convert type 'string' to

2020-02-13 07:20发布

问题:

    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;
    }

}

Seems that i get this error when i try run the code?? what seems to be the issue i changed everything that had int to double.

As well as:

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

What would be the proper code for the custBal. and custYear. to make it display on my form? any ideas?

回答1:

Your user is entering a balance and is typing text, so how do you know the text can be represented by a number? C# will not let you convert a string to a double implicitely because there is no unique way to do that without make substantial assumptions about the string and implicit conversions should never throw an exception (Framework Design Guidelines), so it is best to not offer implicit conversion at all.

For example, since it is a balance, what if the user types "(100.25)" or "-100.25" or "-$100.25" or "-€100,25" or "negative one hundred and twenty-five cents" All of those are valid strings, so how would you convert them to a double?

The answer is that there is not one correct answer: you can map strings to double in any way that makes sense to you. You could, of course, write your own function of the form Func<String, double> but there are functions provided by the .Net framework that implement the most common and intuitive conversions.

Others have posted double.Parse and double.TryParse so I want to add to make sure also to look into NumberStyles and IFormatProvider if necessary.



回答2:

Assuming you know they contain a properly formatted number, what you want is to parse the numeric value contained in each of your strings and assign it to a double type variable (which involves transforming a representation of your number as a string into another of different binary content: a double), not cast it (which doesn't). Try:

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

Or, if you want to test the parsing's success against a returned boolean instead of doing exception handling to test for a FormatException, you can use TryParse instead:

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");

More info:

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

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



回答3:

You should use Double.TryParse() to convert your string to a Double.You cannot save a string on a Double Datatype and there is no implicit conversion available in c# to do that

Double result;
Double.TryParse(custBal.Text,out result);


回答4:

You cannot assign string to a double directly. You need to parse strings to assign them to doubles, like this:

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


回答5:

The best way to convert 'String' to 'Double' is by using TryParse, as shown below:

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;


标签: c# forms