【发布时间】:2016-04-20 13:33:14
【问题描述】:
获取此代码sn-p。
string input = "";
int value = 10;
bool success = int.TryParse(input, out value);
无论我在input 中使用什么,无论是null、""、"a" 等,当它不是有效数字时,它都会返回false,并将0 移动到value。
TryParse() 不是要返回一个布尔值,告知解析成功吗?解析失败时,不应该保持变量不变吗?
这很烦人。所以在调用TryParse()之前我需要一个变量来保存这个值,并创建一个if来验证它的结果,如果失败,将之前的值复制回变量中?
更新。我没有找到official doc 中描述的这种行为,你能指出微软在哪里描述的吗?
我的意思是,一般地解析,TryParse()specially,不仅仅意味着解析字符串。这也意味着验证字符串。如果TryParse() 失败并返回false,这不是错误或异常,这意味着字符串不是有效的int(或任何数据类型),所以我必须处理这个无效的字符串。这可能需要变量的先前值。如果变量设置为 0,则之前的值丢失。
为什么放置一个垃圾值并丢失以前的值?这样,正如我所说,我需要第二个变量来保存该值,这是一种浪费。
我可以扩展或包装TryParse(),但我需要对所有数据类型都这样做。
【问题讨论】:
-
不能不设置——这是一个
out参数。如果您需要所需的功能,将其封装在另一个采用ref参数的方法中并不难。 -
在我看来,它的行为与记录的完全一样:“当此方法返回时,如果转换成功,则包含与 s 中包含的数字等效的 32 位有符号整数值,或者为零如果转换失败。”
-
关于您的编辑/更新 - @JonSkeet 引用的部分位于 result 下的 Parameters 部分
-
另外你没有丢失你试图解析的值,它仍然在
input中。如果要设置默认值value,请执行int value; if (!int.TryParse(input, out value)) { value = 10 };即,而不是之前设置,失败后设置。
标签: c# .net parsing try-catch tryparse