web-dev-qa-db-ja.com

文字列が整数かどうかを確認するC#テスト?

私はc#言語または何かが整数であるかどうかをテストする.netフレームワークに組み込まれているものがあるかどうかについてただの好奇心です

if (x is an int)
   // Do something

あるかもしれないように思えますが、私はプログラミングの1年生だけなので、私は知りません。

59
Alex

int.TryParse メソッドを使用します。

string x = "42";
int value;
if(int.TryParse(x, out value))
  // Do something

解析に成功した場合、trueを返し、outの結果は整数として値を持ちます。

142
Brandon

Int.TryParseとint.Parseの正規表現とchar.IsNumberとchar.IsNumberのパフォーマンスの比較を見てみたのを覚えていると思います。とにかく、パフォーマンスがどうであれ、それを行うもう1つの方法があります。

        bool isNumeric = true;
        foreach (char c in "12345")
        {
            if (!Char.IsNumber(c))
            {
                isNumeric = false;
                break;
            }
        }
15
Wil P

Wil Pソリューション(上記参照)では、LINQも使用できます。

var x = "12345";
var isNumeric = !string.IsNullOrEmpty(x) && x.All(Char.IsDigit);
11
Georg

渡された変数の型を確認したいだけなら、おそらく以下を使用できます。

    var a = 2;
    if (a is int)
    {
        //is integer
    }
    //or:
    if (a.GetType() == typeof(int))
    {
        //is integer
    }
11
rochal

そのシンプル...このコードを使用してください

bool anyname = your_string_Name.All(char.IsDigit);

文字列に整数がある場合はtrueを返し、そうでない場合はfalseを返します。

3
Sibghat

この関数は、文字列に文字0123456789のみが含まれているかどうかを通知します。

private bool IsInt(string sVal)
{
    foreach (char c in sVal)
    {
         int iN = (int)c;
         if ((iN > 57) || (iN < 48))
            return false;
    }
    return true;
}

これは、文字列が整数である可能性があるかどうかを通知するint.TryParse()とは異なります。
例えば。 "123\r\n"はint.TryParse()からTRUEを返しますが、上記の関数からはFALSEを返します。

...答える必要のある質問によって異なります。

2
mike
private bool isNumber(object p_Value)
    {
        try
        {
            if (int.Parse(p_Value.ToString()).GetType().Equals(typeof(int)))
                return true;
            else
                return false;
        }
        catch (Exception ex)
        {
            return false;
        }
    }

しばらく前に書いたもの。上記のいくつかの良い例ですが、ちょうど2セントの価値があります。

1
Kwekuq

たぶん、これは別の解決策になる可能性があります

try
{
    Console.Write("write your number : ");
    Console.WriteLine("Your number is : " + int.Parse(Console.ReadLine()));
}
catch (Exception x)
{
    Console.WriteLine(x.Message);
}
Console.ReadLine();
1
Hari Purnomo

文字列かどうかだけをチェックしたい場合、「out int」キーワードをメソッド呼び出し内に直接配置できます。 dotnetperls.com Webサイトによると、C#の古いバージョンではこの構文は許可されていません。これにより、プログラムの行数を削減できます。

string x = "text or int";
if (int.TryParse(x, out int output))
{
  // Console.WriteLine(x);
  // x is an int
  // Do something
}
else
{
  // x is not an int
}

Int値も取得したい場合は、次のように記述できます。

方法1

string x = "text or int";
int value = 0;
if(int.TryParse(x, out value))
{
  // x is an int
  // Do something
}
  else
{
  // x is not an int
}

方法2

string x = "text or int";
int num = Convert.ToInt32(x);
Console.WriteLine(num);

参照: https://www.dotnetperls.com/parse

1
DxTx

私は約2週間コーディングしており、受け入れられた整数を検証するための簡単なロジックを作成しました。

    Console.WriteLine("How many numbers do you want to enter?"); // request a number
    string input = Console.ReadLine(); // set the input as a string variable
    int numberTotal; // declare an int variable

    if (!int.TryParse(input, out numberTotal)) // process if input was an invalid number
    {
        while (numberTotal  < 1) // numberTotal is set to 0 by default if no number is entered
        {
            Console.WriteLine(input + " is an invalid number."); // error message
            int.TryParse(Console.ReadLine(), out numberTotal); // allows the user to input another value
        }

    } // this loop will repeat until numberTotal has an int set to 1 or above

ループの3番目のパラメーターとしてアクションを宣言しないことで、必要に応じて、FORループで上記を使用することもできます。

    Console.WriteLine("How many numbers do you want to enter?");
    string input2 = Console.ReadLine();

    if (!int.TryParse(input2, out numberTotal2))
    {
        for (int numberTotal2 = 0; numberTotal2 < 1;)
        {
            Console.WriteLine(input2 + " is an invalid number.");
            int.TryParse(Console.ReadLine(), out numberTotal2);
        }

    }

ループが必要ない場合は、単にループブレース全体を削除してください

0
Shujin