簡體   English   中英

檢查一個char是否匹配char數組中的任何char

[英]Check if a char matches any char in a char array

本質上,我正在嘗試檢查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);

從您的代碼開始,有很多錯誤

  1. 您正在為每個字符遞增0123456789的數組,一旦在循環外就可以完成操作
  2. 已經有一種檢查字符是否為數字的方法char.IsDigit

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);

但是在那一刻,您正在嘗試將其解析為整數,因此我懷疑您想問的是“如何檢查所有字符是否為整數”-恰恰相反

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

但是,正如其他答案所指出的那樣,有一種方法可以使用int.TryParse

使用IsLetter

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

但由於您的目標是將其解析為int而不是TryParse

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM