在将字符串(通常)转换为适当的数据类型时,似乎还存在很多混淆,同时也会对它进行实时验证。无论我在哪里看 - 博客,文章,代码示例,论坛......有几个人似乎都有首选处理这些情况的方式。转换来自未知来源的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