检查char是否匹配char数组中的任何char

时间:2017-07-12 16:21:15

标签: c# char

基本上,我正在尝试检查textbox2.Text是否包含任何不是整数的内容。这是一种非常低效的方式,但这是我能想到的唯一方法。有什么比我更好的了吗?

char[] ca = textBox2.Text.ToCharArray();
foreach (char c in ca)
{
    string s = "1234567890";
    char[] ca2 = s.ToCharArray();
    if (c != ca2[0] && c != ca2[1] && c != ca2[2] && c != ca2[3] && c != ca2[4] &&
        c != ca2[5] && c != ca2[6] && c != ca2[7] && c != ca2[8] && c != ca2[9])
    {
        MessageBox.Show("Non-integer detected in text box.");
        EndInvoke(null);
    }
}
int i = int.Parse(textBox2.Text);

2 个答案:

答案 0 :(得分:2)

从你的代码开始,有一堆错误

  1. 你为每个角色重新创建0123456789数组,你可以在循环之外完成这个
  2. 有一种方法可以检查字符是否为数字 - char.IsDigit
  3. char[] ca = textBox2.Text.ToCharArray();
    foreach (char c in ca)
    {
        if(!char.IsDigit(c))
        {
            MessageBox.Show("Non-integer detected in text box.");
            EndInvoke(null);
        }
    }
    

    但你甚至不需要自己做循环,你可以使用Linq方法检查Any元素是否满足布尔条件

    var hasAnyNumbers = textBox2.Text.ToCharArray().Any(char.IsDigit);
    

    但是那时你正试图将它解析成一个整数,所以我怀疑你的意思是"如何检查所有这些字符是整数&# 34; - 这是相反的

    var isAllNumbers = textBox2.Text.ToCharArray().All(char.IsDigit);
    

    但是,正如另一个答案所述 - 这是一种方法 - int.TryParse

答案 1 :(得分:1)

使用IsLetter

bool containNonLetter = textBox2.Text.Any(c => !char.IsLetter(c));

但是,您的目标是将其解析为int,而不是使用TryParse

int result;
if(int.TryParse(textBox2.Text,out result))
{
    //Use result
}