获取此代码段。
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()
,但我需要对所有数据类型执行此操作。
答案 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
}