可能重复:
Help converting type - cannot implicitly convert type 'string' to 'bool'
我有这段代码:
private double Price;
private bool Food;
private int count;
private decimal finalprice;
public void Readinput()
{
Console.Write("Unit price: ");
Price = Console.ReadLine();
Console.Write("Food item y/n: ");
Food = Console.ReadLine();
Console.Write("Count: ");
count = Console.ReadLine();
}
private void calculateValues()
{
finalprice = Price * count;
}
并收到以下错误:
无法将类型'string'隐式转换为'bool'
无法将类型'string'隐式转换为'double'
无法将类型'string'隐式转换为'int'
无法将类型'double'隐式转换为'decimal'。存在显式转换(您是否错过了演员?)
我知道这意味着什么,但我不知道如何解决它。
答案 0 :(得分:18)
使用bool.Parse
或bool.TryParse
方法将字符串值转换为boolean
。
Price = double.Parse(Console.ReadLine());
Food =bool.Parse(Console.ReadLine());
count = int.Parse(Console.ReadLine());
您无法将“y”或“n”值转换为布尔值,而是必须以字符串形式接收值,如果为“y”,则存储true
,否则为false
。 / p>
Console.Write("Food item y/n: ");
string answer = Console.ReadLine();
if(answer=="y")
Food=true;
else
Food=false;
或(建议@ Mr-Happy)
Food = answer == "y"
您需要在计算finalprice
时指定显式强制转换。
private void calculateValues()
{
// convert double result into decimal.
finalprice =(decimal) Price * count;
}
答案 1 :(得分:5)
您必须使用静态类Convert将您从控制台读取的内容(字符串)转换为实际类型。例如:
Console.Write("Count: ");
count = Convert.ToInt32(Console.ReadLine());
如果给出的参数无法转换,则会崩溃,但现在这不是您的主要问题,所以让我们保持简单。
答案 2 :(得分:1)
Console.Write("Unit price: ");
double.TryParse(Console.ReadLine(), out Price);
Console.Write("Food item y/n: ");
bool.TryParse(Console.ReadLine(), out Food);
Console.Write("Count: ");
int.TryParse(Console.ReadLine(), out count);
答案 3 :(得分:0)
private double Price;
private bool Food;
private int count;
private decimal finalprice;
public void Readinput()
{
Console.Write("Unit price: ");
double.TryParse(Console.ReadLine(), out Price);
Console.Write("Food item y/n: ");
bool.TryParse(Console.ReadLine(), out Food);
Console.Write("Count: ");
int.TryParse(Console.ReadLine(), out count);
}
private void calculateValues()
{
finalprice = Price * count;
}
答案 4 :(得分:0)
你必须将Console.ReadLine()
调用包装在适当的解析器函数中,因为(例如,与PHP不同)C#是一种静态类型语言,另外只能保证安全和无损的转换。隐式:
Price = double.Parse(Console.ReadLine());
Console.Write("Food item y/n: ");
// I think you want the user to type in "y", "Y", "n" or "N", right?
Food = Console.ReadLine().ToUpper() == "Y";
Console.Write("Count: ");
count = int.Parse(Console.ReadLine());
在您的计算方法中,您必须将结果double显式转换为小数,因为C#不支持固定点和浮点值之间的隐式转换:
finalprice = (decimal)(Price * count);