我对Integer.TryParse()函数的理解是,它试图从传入的字符串中解析一个整数,如果解析失败,结果整数将保持原样。
我有一个默认值为-1的整数,如果解析失败,我希望保持为-1。但是,无法解析的Integer.TryParse()函数将此默认值更改为零。
Dim defaultValue As Integer = -1
Dim parseSuccess As Boolean = Integer.TryParse("", defaultValue)
Debug.Print("defaultValue {0}", defaultValue)
Debug.Print("parseSuccess {0}", parseSuccess)
我的期望是上面的代码片段应输出:
defaultValue -1
parseSuccess False
然而它输出:
defaultValue 0
parseSuccess False
我的理解是否正确?
答案 0 :(得分:20)
这是一个out
参数,这意味着必须由方法设置(除非它抛出异常) - 该方法无法查看原始值是什么。
替代方法是将其设为ref
参数并仅将其设置为成功,但这意味着强制调用者首先初始化变量,即使他们不想要这种行为。
您可以编写自己的实用程序方法:
public bool TryParseInt32(string text, ref int value)
{
int tmp;
if (int.TryParse(text, out tmp))
{
value = tmp;
return true;
}
else
{
return false; // Leave "value" as it was
}
}
答案 1 :(得分:3)
你是对的,如果失败,TryParse使用0。 (MSDN非常清楚地说明了这一点) 但是你可以检查paseSuccess并返回你想要的默认值。