2012-10-07 90 views
0
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; 
    } 

} 

似乎我得到這個錯誤,當我嘗試運行代碼?似乎是什麼問題,我改變了一切,有詮釋翻番。不能隱式地將類型'字符串'轉換爲'double'問題

除了:

 customers[id].Balance = custBal.Text; 
     customers[id].Year_used = custYear.Text; 

什麼是對custBal正確的代碼。和custYear。使其顯示在我的表單上?有任何想法嗎?

+0

你可以擺脫。ToString()上的ID,名稱和郊區分配。您將字符串(.Text)分配給字符串屬性。還要考慮驗證 - 如果無法提交沒有有效餘額和年份的表單,那就沒問題。但除此之外,請查看[double.TryParse()](http://msdn.microsoft.com/en-us/library/system.double.tryparse.aspx)。 – Michael

回答

2

你用戶正在輸入一個餘額並輸入文本,那麼您如何知道文本可以用數字表示? C#不會讓您將字符串轉換爲雙重隱式,因爲在沒有對字符串做出實質性假設的情況下,沒有獨特的方法可以做到這一點,並且隱式轉換不應該拋出異常(框架設計指南),所以最好不要提供隱式完全轉換。例如,由於它是餘額,所以如果用戶鍵入「(100.25)」或「-100.25」或「 - $ 100.25」或「 - €100,25」或「負一百二十五美分「所有這些都是有效的字符串,那麼如何將它們轉換爲雙精度?

答案是沒有一個正確的答案:你可以映射字符串以任何對你有意義的方式加倍。當然,您可以編寫自己的Func<String, double>格式的函數,但是.Net框架提供的功能可以實現最常見和直觀的轉換。

其他人發佈double.Parsedouble.TryParse所以我想補充,以確保必要時還尋找到NumberStylesIFormatProvider

+0

乾杯..yeah謝謝你的帖子..耶啊,我知道這個字符串不能轉換成雙..不是很想哈哈感謝壽! – user1618490

0

您應該使用Double.TryParse()你的字符串轉換爲Double.You不能保存在一個雙數據類型的字符串,並且在C#中沒有可用的隱式轉換做

Double result; 
Double.TryParse(custBal.Text,out result); 
+0

雙嘗試解析需要兩個參數 –

+0

@haris:已編輯 –

2

假設你知道它們含有正確格式化的數字,你想要的是解析每個字符串中包含的數字值,並將其分配給一個雙精度型變量(這涉及將字符串表示形式轉換爲另一個不同的二進制內容:雙精度型),不投(它不)。嘗試:

customers[id].Balance = Double.Parse(custBal.Text); 
customers[id].Year_used = Double.Parse(custYear.Text); 

或者,如果你想測試解析反對返回的布爾而不是做異常處理來測試出現FormatException成功,你可以使用的TryParse來代替:

if (!Double.TryParse(custBal.Text, customers[id].Balance)) 
    Console.WriteLine("Parse Error on custBal.Text"); 
if (!Double.TryParse(custYear.Text, customers[id].Year_used)) 
    Console.WriteLine("Parse Error on custYear.Text"); 

更多信息:

http://msdn.microsoft.com/en-us/library/t9ebt447%28v=vs.80%29.aspx

http://msdn.microsoft.com/en-us/library/994c0zb1.aspx

+0

謝謝!使用相同的代碼它似乎並沒有更新任何更改時,當我更改窗體上的信息時,當我點擊更新按鈕,然後單擊下一個更改似乎沒有改變我的窗體..我的形式? – user1618490

1

您不能直接將string分配給double。您需要解析字符串將它們分配到雙打,就像這樣:

customers[id].Balance = double.Parse(custBal.Text); 
customers[id].Year_used = double.Parse(custYear.Text); 
0

的最好辦法「字符串」轉換爲「雙師型」是使用的TryParse,如下圖所示:

int result; 

if (double.TryParse(custBal.Text, out result)) 
    customers[id].Balance = result; 
if (double.TryParse(custYear.Text, out result)) 
    customers[id].Year_used = result; 
相關問題