在將字符串(通常)轉換爲適當的數據類型時,似乎還存在很多混淆,同時也會對它進行實時驗證。無論我在哪裏看 - 博客,文章,代碼示例,論壇......有幾個人似乎都有首選處理這些情況的方式。轉換來自未知來源的C#數據類型
的情況下通常是一個字符串/對象是來自未知來源,如查詢字符串,會議/視圖狀態,WebService的,等...
我見過很多不同的例子:
假設我們試圖獲取id=
查詢字符串並將其作爲整數在我們的代碼中使用。但有人篡改了我們的網址,並將其改爲
一種方式
int id = Convert.ToInt32(Request["id"]);
// "Input string was not in a correct format"
另一種方式
int id = (int)Request["id"];
// "Input string was not in a correct format"
另一種方式
int id = int.Parse(Request["id"]);
// "Input string was not in a correct format"
我所見過這個(它那種有道理拋出一個異常,並通知用戶)
int id = 0;
try {
id = Convert.ToInt32(Request["id"]);
}
catch(Exception ex) {
lblError.Text = ex.Message;
}
if(id > 0) { ... }
最後,和一個我親自使用
int id = 0;
int.TryParse(Request["id"], out id);
// make sure it's not 0
if(id > 0) { // live a happy life }
這同樣適用於所有其他類型,bool
,double
,decimal
等..
請幫助我理解正確的方法是什麼,因爲我發現自己使用這個在一天到一天的基礎上。
正確的地方。這就是爲什麼人們對Ruby/Python如此興奮!專注於行爲和數據類型可以稍後處理 – Perpetualcoder 2010-10-13 02:29:53