2010-10-28 73 views
0

拿這個例子:如何擺脫轉換費用?

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類。

這種開銷可以通過泛型中的任何東西來避免嗎?

回答

4
  1. 您無需致電.ToString()
  2. 是的,它的確如此。

你試圖寫

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

您當前的代碼執行以下操作:

  • Console.ReadLine():從控制檯讀取一行,返回String對象。
  • (...).ToString()返回相同String對象
  • string.Format("{0}! ", (...)):返回包含原始字符串隨後!String對象。
  • Convert.ToDecimal((...)):嘗試將其解析爲Decimal值。
    由於字符串!結束,失敗
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 
} 
+0

你能解釋內部Convert.ToDecimal和Decimal.Parse是如何工作的嗎? – RKh 2010-10-28 15:53:02

+1

通常,您應該更喜歡'Decimal.TryParse',因爲它會嘗試進行轉換,並且如果轉換不成功則返回'false'。另一方面,Convert.ToDecimal會在錯誤時拋出異常。特別是在用戶界面代碼中,處理「假」返回值比處理異常要容易得多。在內部,我真的不知道這兩者有何不同。我懷疑在將字符串轉換爲小數時,Convert.ToDecimal結束調用Decimal.Parse。 – 2010-10-28 16:21:30