Mic*_*ern 11 c# validation parsing
C#自发布以来一直困扰我的一件事是缺乏通用的IsNumeric函数.我知道如果一个值是数字,很难产生一个一站式解决方案.
我过去使用过以下解决方案,但这不是最佳实践,因为我生成一个异常以确定该值是否为IsNumeric:
public bool IsNumeric(string input)
{
try
{
int.Parse(input);
return true;
}
catch
{
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
这仍然是解决此问题的最佳方法,还是有更有效的方法来确定C#中的值是否为数字?
Meh*_*ari 22
试试这个:
int temp;
return int.TryParse(input, out temp);
Run Code Online (Sandbox Code Playgroud)
当然,行为将与Visual BasicIsNumeric不同.如果您想要这种行为,可以添加对"Microsoft.VisualBasic"程序集的引用并直接调用该Microsoft.VisualBasic.Information.IsNumeric函数.
Eri*_* J. 14
您可以使用扩展方法扩展String类型以包含IsInteger:
namespace ExtensionMethods
{
public static class MyExtensions
{
public static bool IsInteger(this String input)
{
int temp;
return int.TryParse(input, out temp);
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用int.TryParse 而不是使用int.Parse来避免异常.
像这样的东西
public static bool IsNumeric(string input)
{
int dummy;
return int.TryParse(input, out dummy);
}
Run Code Online (Sandbox Code Playgroud)
更一般地说,你可能想看看double.TryParse.
您还应该考虑的一件事是为不同文化处理数字字符串的可能性.例如,希腊语(el-GR),用作小数分隔符,而英国(en-GB)使用a ..因此字符串"1,000"将为1000或1,具体取决于当前的文化.鉴于此,您可以考虑为IsNumeric提供支持传递预期文化,数字格式等的重载.看看double.TryParse的2次重载.
我之前使用过以下扩展方法,如果它有帮助的话:
public static int? AsNumeric(this string source)
{
int result;
return Int32.TryParse(source, out result) ? result : (int?)null;
}
Run Code Online (Sandbox Code Playgroud)
然后你可以使用.HasValue在bool你现在或.Value为价值,但转换只有一次...只是把它扔在那里,不知道你使用它以后的情况.
| 归档时间: |
|
| 查看次数: |
6994 次 |
| 最近记录: |