如何摆脱转换开销?

时间:2010-10-28 15:41:28

标签: c#

举个例子:

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中的任何内容都可以避免这种开销吗?

2 个答案:

答案 0 :(得分:4)

  1. 您无需致电.ToString()
  2. 是的,确实如此。
  3. 你正在尝试写

    customer.Salary = Decimal.Parse(Console.ReadLine());
    

    您当前的代码执行以下操作:

    • Console.ReadLine():从控制台读取一行,返回String个对象。
    • (...).ToString()返回相同的String对象
    • string.Format("{0}! ", (...)):返回一个新的String对象,其中包含原始字符串,后跟!
    • Convert.ToDecimal((...)):尝试将其解析为Decimal值 由于字符串以!结尾,因此失败

答案 1 :(得分:1)

如果您使用Decimal.ParseDecimal.TryParse进行转化,而不是依赖Convert.ToDecimal,我认为您会更开心。你可以写:

Decimal tempSal;
string sal = Console.ReadLine();
if (Decimal.TryParse(sal, out tempSal))
{
    customer.Salary = tempSal;
}
else
{
    // user entered bad data
}