我知道可以使用try / catch语句检查文本框或变量的值是否为数字,但IsNumeric
所以更简单。我当前的一个项目需要从文本框中恢复值。不幸的是,它是用C#编写的。
我知道有一种方法可以通过添加对Visual Basic的引用来启用Visual C#中的Visual Basic IsNumeric
函数,但我不知道它的语法。我需要的是在C#中启用IsNumeric
函数的简明扼要的演练。我不打算使用Visual Basic本地的任何其他功能。
答案 0 :(得分:21)
public bool IsNumeric(string value)
{
return value.All(char.IsNumber);
}
答案 1 :(得分:15)
要完全从Bill回答,你可以制作一个扩展方法并使用一些语法糖来帮助你。
创建一个类文件StringExtensions.cs
内容:
public static class StringExt
{
public static bool IsNumeric(this string text)
{
double test;
return double.TryParse(text, out test);
}
}
编辑:这是针对更新的C#7语法。在线声明参数。
public static class StringExt
{
public static bool IsNumeric(this string text)
{
return double.TryParse(text, out double test);
}
}
这样的调用方法:
var text = "I am not a number";
text.IsNumeric() //<--- returns false
答案 2 :(得分:14)
你可以制作一个帮助方法。类似的东西:
public bool IsNumeric(string input) {
int test;
return int.TryParse(input, out test);
}
答案 3 :(得分:4)
http://msdn.microsoft.com/en-us/library/wkze6zky.aspx
菜单: 项目 - &gt;添加参考
点击:assembly,framework
勾选Microsoft.VisualBasic。
点击确定。
该链接适用于Visual Studio 2013,您可以使用“其他版本”下拉列表来显示不同版本的Visual Studio。
在所有情况下,您都需要添加对.NET程序集“Microsoft.VisualBasic”的引用。
在c#文件的顶部,你需要:
using Microsoft.VisualBasic;
然后你可以看看编写代码。
代码如下:
private void btnOK_Click(object sender, EventArgs e)
{
if ( Information.IsNumeric(startingbudget) )
{
MessageBox.Show("This is a number.");
}
}
答案 4 :(得分:3)
使用C#7(.NET Framework 4.6.2),您可以将IsNumeric函数编写为一行:
public bool IsNumeric(string val) => int.TryParse(val, out int result);
请注意,上述函数仅适用于整数(Int32)。但是您可以为其他数值数据类型实现相应的函数,如long,double等。
答案 5 :(得分:2)
尝试以下代码段。
double myVal = 0;
String myVar = "Not Numeric Type";
if (Double.TryParse(myVar , out myNum)) {
// it is a number
} else {
// it is not a number
}
答案 6 :(得分:1)
我通常使用扩展方法处理这样的事情。以下是在控制台应用程序中实现的一种方法:
namespace ConsoleApplication10
{
class Program
{
static void Main(string[] args)
{
CheckIfNumeric("A");
CheckIfNumeric("22");
CheckIfNumeric("Potato");
CheckIfNumeric("Q");
CheckIfNumeric("A&^*^");
Console.ReadLine();
}
private static void CheckIfNumeric(string input)
{
if (input.IsNumeric())
{
Console.WriteLine(input + " is numeric.");
}
else
{
Console.WriteLine(input + " is NOT numeric.");
}
}
}
public static class StringExtensions
{
public static bool IsNumeric(this string input)
{
return Regex.IsMatch(input, @"^\d+$");
}
}
}
A不是数字。
22是数字。
马铃薯不是数字。
Q不是数字。
A&amp; ^ * ^不是数字。
Note, here are a few other ways to check for numbers using RegEx.
答案 7 :(得分:1)
值得一提的是,可以对照Unicode类别(数字,大写,小写,货币等)检查字符串中的字符。这是两个使用Linq检查字符串中数字的示例:
-- INSERT INTO distribution(loan_id,t_in,t_out,amount)
-- we compute the distributions for the current IN transaction and store them in table DISTRIBUTIONS
-- to be used by the next IN transaction
SELECT current.loan_id,6 AS t_in,current.t_id AS t_out,25 * (current.amt - paid) / (total_due - total_paid) AS distributed
FROM
-- first we get the amount paid for each existing OUT transaction
(SELECT t.loan_id,t.t_id,t.amt,SUM(d.amount) AS paid
FROM transactions AS t
LEFT JOIN distribution AS d ON t.loan_id = d.loan_id AND t.t_id = d.t_out
WHERE t_type = 'OUT' AND t.t_id < 6 -- only OUT transactions before the current IN transaction
GROUP BY t.loan_id,t.t_id,t.amt) AS current
LEFT JOIN
-- next we get the total amount due for the given loan
(SELECT loan_id,SUM(amt) AS total_due
FROM transactions
WHERE t_type = 'OUT' AND t_id < 6 -- only OUT transactions before the current IN transaction
GROUP BY loan_id) AS t_due
ON current.loan_id = t_due.loan_id
LEFT JOIN
-- next we get the total amount paid for the given loan
(SELECT loan_id,COALESCE(SUM(amount),0) AS total_paid
FROM distribution AS d
WHERE t_out < 6 -- only OUT transactions before the current IN transaction
GROUP BY loan_id) AS t_paid
ON current.loan_id = t_paid.loan_id
WHERE current.loan_id = 1 -- the loan ID of the current IN transaction
为清楚起见,以上语法是以下版本的简化版本:
var containsNumbers = s.Any(Char.IsNumber);
var isNumber = s.All(Char.IsNumber);
链接到MSDN上的unicode类别:
答案 8 :(得分:-1)
数字是否可以通过多种方式实现,但我用我的方式
public bool IsNumeric(string value)
{
bool isNumeric = true;
char[] digits = "0123456789".ToCharArray();
char[] letters = value.ToCharArray();
for (int k = 0; k < letters.Length; k++)
{
for (int i = 0; i < digits.Length; i++)
{
if (letters[k] != digits[i])
{
isNumeric = false;
break;
}
}
}
return isNumeric;
}