2013-06-27 29 views
0

我很困惑,以嘗試和處理可能的InvalidOperationException。可能的invalidoperationexception正確的方式來處理它

在我的代碼,我得到一個藍色的線下(decimal)data.CurrencyExchangeRate因此更改代碼:

data.CurrencyExchangeRate.GetValueOrDefault()刪除藍線。

由於數據來自數據庫,而列是小數,因此它永遠不會爲空。

那麼是GetValueOrDefault處理可能的錯誤的最佳方法?

我只是不知道如何最好地處理它。

感謝

+0

data.CurrencyExchangeRate被定義爲'decimal?'如果是這樣的話。如果這是Linq2Sql/Linq2Entities你有沒有嘗試在設計器中設置非空選項? –

+0

'CurrencyExchangeRate'屬性是什麼數據類型? – greg84

回答

1

假設CurrencyExchangeRate是一個可空的小數,該GetValueOrDefault擴展方法是你最安全的賭注 - 如果要使用默認設置爲零時該值爲null。

對於其他默認值,如1,使用這樣的:

decimal val = data.CurrencyExchangeRate.HasValue 
    ? data.CurrencyExchangeRate.Value 
    : 1M; 

唯一的例外,你會從GetValueOrDefault趕會從系統中如OutOfMemoryExceptions等,所以它不太可能你會在這裏得到一個錯誤。

+0

嗨Greg84,謝謝,所以我已經做到了這一點,你所展示的例子都可以工作。 – CareerChange

+0

正確。你可以用你的方式或我的方式。儘管如果您需要與可空類型不同的默認值,您只需要使用我的方式。 – greg84

+0

嗨Greg84,謝謝澄清我的問題 – CareerChange

1

還是應該做一個try/catch。切勿假設數據庫中的數據始終有效。例如,如果我將數據庫中的數據類型更改爲VARCHAR並添加了null值,那麼應用程序會崩潰。因此處理異常是有意義的。

try { 
    var value = data.CurrencyExchangeRate.GetValueOrDefault(); 
} catch (InvalidOperationException e) { 
    // Log the exception 
} 
+1

如果您將數據類型更改爲varchar,那麼很可能是ORM會在您達到那麼遠之前中斷。 –

+0

嗨達倫,我已經把代碼包裝在try catch塊中,對不起應該補充說明。我只是困惑於處理這個問題的最佳方式 – CareerChange

相關問題