当解析失败时,TryParse在变量上放置0

时间:2016-04-20 13:33:14

标签: c# .net parsing try-catch tryparse

获取此代码段。

string input = "";
int value = 10;
bool success = int.TryParse(input, out value);

无论我在input中使用什么,无论是null"""a"等,当它不是有效数字时,它会返回false并且步入0进入value

是不是TryParse()意味着返回一个bool通知解析成功?当解析失败时,它不应该只是保持变量不变吗?

这很烦人。所以在调用TryParse()之前我需要一个变量来保存该值,并使if验证其结果,如果失败则将前一个值复制回变量?

更新。我没有发现official doc中描述的这种行为,你能指出微软描述的地方吗?

我的意思是,一般解析,特别是TryParse(),并不仅仅是解析一个字符串。它也意味着验证字符串。如果TryParse()失败并返回false,则它不是错误或异常,这意味着该字符串不是有效的int(或任何数据类型),因此我必须处理此无效字符串。这可能需要变量的先前值。如果变量设置为0,则先前的值将丢失。

为什么放置垃圾值并丢失之前的值?这样,就像我说的那样,我需要第二个变量来保存这个值,这是浪费。

我可以扩展或包装TryParse(),但我需要对所有数据类型执行此操作。

1 个答案:

答案 0 :(得分:2)

int.TryParse将数字的字符串表示形式转换为其32位有符号整数等价物。返回值表示操作是否成功;所以我们能做的是:

if(int.TryParse(input, out value))
{
 // proceed with your code
} 
else 
{
 // show some message that the input is not valid
}