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
}
使用这段代码。
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
}