举个例子:
customer.Salary = Convert.ToDecimal(string.Format("{0}! ", Console.ReadLine().ToString()));
(1)为什么在C#中我们需要总是使用.ToString()来实现它?
(2)Convert.To ...它不会不必要地产生开销吗?
此外,在下面给出的代码中:在接受用户输入后,它给出错误:“输入字符串格式不正确”。
// Main begins program execution.
public static void Main()
{
Customer customer = new Customer();
// Write to console/get input
Console.Write("Enter customer's salary: ");
customer.Salary = Convert.ToDecimal(string.Format("{0}! ", Console.ReadLine().ToString()));
Console.WriteLine("Salary in class variable is: {0}", customer.Salary.ToString());
Console.Read();
}
class Customer
{
public Decimal Salary { get; set; }
}
再次,我必须使用:
string sal = Convert.ToDecimal(string.Format("{0}! ", Console.ReadLine().ToString()));
customer.Salary = Convert.ToDecimal(sal);
或者,我必须在Customer类中更改数据类型。
Generics中的任何内容都可以避免这种开销吗?
答案 0 :(得分:4)
.ToString()
。你正在尝试写
customer.Salary = Decimal.Parse(Console.ReadLine());
您当前的代码执行以下操作:
Console.ReadLine()
:从控制台读取一行,返回String
个对象。(...).ToString()
返回相同的String
对象string.Format("{0}! ", (...))
:返回一个新的String
对象,其中包含原始字符串,后跟!
。Convert.ToDecimal((...))
:尝试将其解析为Decimal
值
由于字符串以!
结尾,因此失败答案 1 :(得分:1)
如果您使用Decimal.Parse
或Decimal.TryParse
进行转化,而不是依赖Convert.ToDecimal
,我认为您会更开心。你可以写:
Decimal tempSal;
string sal = Console.ReadLine();
if (Decimal.TryParse(sal, out tempSal))
{
customer.Salary = tempSal;
}
else
{
// user entered bad data
}