【发布时间】:2015-08-19 08:48:23
【问题描述】:
由于错误System.FormatException,我有一些代码有时会失败。据我了解,如果UserId 不为空,那么默认0 应该从下面的方法GetUserProperty 返回,我知道(并且对此毫无疑问)系统中的UserId 将是某个数字或为空,它永远不会是非数字的。
代码如下:
private void SomeMethod()
{
var userId = Convert.ToInt32(GetUserProperty("UserId", "0"));
// Do something with userId..
}
public string GetUserProperty(string propertyName, string defaultValue = "")
{
var propertyValue = SecurityUtil.GetUserProperty(propertyName);
return !string.IsNullOrWhiteSpace(propertyValue) ? propertyValue : defaultValue;
}
系统日志中的 StackTrace 说:
System.FormatException: Input string was not in a correct format. at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal) at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info) at ...
【问题讨论】:
-
Convert.ToInt32(string)如果输入是表示有效整数的字符串,则永远不会失败 - 所以它不会随机失败。您需要找出为什么GetUserProperty("UserId", "0")不是有效的整数表示。 -
@un-lucky: 如果你传入
null引用,Convert.ToInt32返回 0。但是,它不会处理 empty 字符串。 -
@Phill:是的,但这不是用空字符串调用
Convert.ToInt32,是吗? -
@Phill: 是的,但我和我都不是不走运的。我们只是谈论涉及的
Convert.ToInt32电话。请查看 cmets:“Convert.ToInt32()` 无法处理 null”和“如果传入 null 引用,Convert.ToInt32 返回 0。但是,它不会处理空字符串。” -
@Phill:请再次阅读我的评论 - 以及之前的 cmets。不幸的是,
Convert.ToInt32无法处理空引用。我说它可以,但它不能处理空字符串。然后你给我发了一条评论说“它可以很好地处理一个空字符串”显然错过了不能处理空字符串的Convert.ToInt32的上下文......然后在09:39:13Z没有阅读我的解释。