如果返回除数字以外的任何内容,我需要扩展此代码以调用GetReasonForFailure方法。
即
123 =无效
ABC =无效
1234567890 = IsValid
NULL = IsValid
using System.Linq;
namespace WorksheetValidator.Rules
{
public class ImportCommodityCode : IRule
{
public bool IsValid(string value)
{
return string.IsNullOrEmpty(value) || value.Length == 10 ;
}
public string GetReasonForFailure(string value)
{
return string.Format("[{0}] Codes should be 10 digits long and only contain numbers", value);
}
}
}
答案 0 :(得分:1)
Int32.TryParse不能在此上下文中使用,因为9999999999
大于Int32.MaxValue因此它会溢出并且转换失败。
你可以使用long.TryParse
,或者,如果你想要一个IEnumerable解决方案,你可以写
public class ImportCommodityCode : IRule
{
public bool IsValid(string value)
{
return string.IsNullOrEmpty(value) ||
(value.Length == 10 &&
!value.AsEnumerable().Any (t => !char.IsDigit(t)));
}
}
此代码符合您的要求,即您认为NULL(或空)字符串应被视为有效,尽管我对此条件有点困惑。但是,使用
更改该部分很容易 return !string.IsNullOrEmpty(value) && ....
答案 1 :(得分:0)
使用long.TryParse
。
public bool IsValid(string value)
{
long temp;
return string.IsNullOrEmpty(value) || (value.Length == 10 && long.TryParse(string, out temp));
}
编辑:其他人都是对的;使用long.TryParse()
。 int
2147483648
溢出,不会为您提供全部10位数字。
答案 2 :(得分:0)
public bool IsValid(string value)
{
return string.IsNullOrEmpty(value) || value.Length == 10 && Regex.IsMatch(value, @"^[0-9]+$");
}
答案 3 :(得分:0)
试试这个:
public bool IsValid(string value)
{
return string.IsNullOrEmpty(value) || value.ToArray<char>().All<char>(i=>char.IsDigit(i));
}
答案 4 :(得分:0)
不确定我是否明白......检查一个字符串是否代表一个数字,你可以尝试将其转换为整数或双数(如果是这样的话)
int n = 0;
if (Int32.TryParse(value, out n))
{
}
HTH, Cabbi
答案 5 :(得分:0)
使用正则表达式
public bool IsValid(string value)
{
return Regex.IsMatch(value, @"^[0-9]{10}$");
}
答案 6 :(得分:0)
根据您的规范:
public static bool IsValid(string value)
{
return value == null || (value.Length == 10 && value.All(Char.IsDigit));
}