user1618490 user1618490 - 13 days ago 4
C# Question

Cannot implicitly convert type 'string' to 'double' Issue

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?

Answer

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.

Comments