TryParse 在解析失败时将 0 放在变量上

TryParse places 0 on the variable when parse fails

使用这段代码。

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

无论我在 input 中使用什么,无论是 null"""a" 等,当它不是有效数字时,它 return s false 并将 0 步进 value.

TryParse() 不是要 return 一个通知解析成功的布尔值吗? parse 失败时,不应该直接保持变量不变吗?

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

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

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

为什么要放置一个垃圾价值而失去以前的价值?这样,正如我所说,我需要第二个变量来保存该值,这是一种浪费。

我可以扩展或包装 TryParse(),但我需要对所有数据类型都这样做。

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

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