【发布时间】:2014-10-07 08:36:59
【问题描述】:
这是验证字符串是否仅包含八进制数字的有效方法吗?
public static bool IsOctal(String toCheck)
{
if (toCheck.Contains(" "))
{
return false;
}
int parsedtoCheck;
var parseOk = int.TryParse(toCheck, out parsedtoCheck);
if (!parseOk)
{
return false;
}
if (Convert.ToInt32(toCheck, 8) != parsedtoCheck)
{
return false;
}
return true;
}
【问题讨论】:
-
根据this stack overflow question 看来您可能已经有了答案(并不是说我提倡抛出异常作为转换测试)
-
@jeffdot:永远不应该抛出期望,因为 toCheck 是 TryParse 之后的有效整数,还是我错过了什么?
-
或许:
try{Convert.ToInt32(toCheck, 8);return true;}catch{return false} -
@benba:不,因为“9”会在
int.TryParse中成功,但在Convert.ToInt32(toCheck, 8)中不会。而其他应该成功的值(例如“10”)将返回false,因为八进制10不等于十进制10... -
@JonSkeet:我得到的第一点是,在文档中过度阅读了它们。但是第二个,Convert.ToInt32(10, 8) 返回一个 Int32 10 并且与另一个 10 相比它应该是相同的吗?我以为 C# 不知道八进制的任何表示?
标签: c# validation octal