我正在尝试解析一个字符串以返回这样的int:
private UserCredentials GetAddressBook(string userName)
{
int addressBookId = 0;
int.TryParse(userName, out addressBookId);
return this.GetAddressBook(addressBookId);
}
我的问题是addressBookId始终为0.我的userName是cara4。
答案 0 :(得分:5)
cara4
不是有效整数,因此您获得的默认值为0.始终评估返回的bool
frrom int.TryParse
以确定格式是否有效。
也许你想要:
private UserCredentials GetAddressBook(string userName)
{
int addressBookId = 0;
bool valid = int.TryParse(userName, out addressBookId);
if(!valid)
{
var lastDigits = userName.SkipWhile(char.IsLetter).TakeWhile(char.IsDigit);
valid = int.TryParse(string.Concat(lastDigits), out addressBookId);
}
if(valid)
return this.GetAddressBook(addressBookId);
else
return null;
}
旁注:这个LINQ方法并不真正返回字符串的最后一位数字,而是返回第一个非数字后面的数字,因此"cara1foo2"
会返回1
。如果您的逻辑是addressBookId
在最后,您可以使用:
var lastDigits = userName.Reverse().TakeWhile(char.IsDigit).Reverse();
答案 1 :(得分:3)
通常Try.Parse
用于if-block。这样你只有在解析工作时才会返回:
if(int.TryParse(userName, out addressBookId))
{
return this.GetAddressBook(addressBookId);
}
else
{
return null;
}
您的问题是userName = "cara4"
的值包含无效字符,不代表数字。如果转换成功,TryParse方法会将转换后的数字写入out
参数(在您的情况下为addressBookId
)。否则它出错了,你不应该使用addressBookId