web-dev-qa-db-ja.com

C#のIsNumeric関数

Try/catchステートメントを使用して、テキストボックスまたは変数の値が数値であるかどうかを確認することはできますが、IsNumericsoより簡単です。現在のプロジェクトの1つでは、テキストボックスから値を復元する必要があります。残念ながら、C#で書かれています。

Visual Basicへの参照を追加することにより、Visual C#でVisual Basic IsNumeric関数を有効にする方法があることを理解していますが、その構文はわかりません。必要なのは、C#でIsNumeric関数を有効にするための明確で簡潔なチュートリアルです。 Visual Basic固有のその他の関数を使用する予定はありません。

12
user3352070
public bool IsNumeric(string value)
{
    return value.All(char.IsNumber);
}
29
CodeDog

ビルの回答から完全に盗むには、拡張メソッドを作成し、構文糖を使用して手伝います。

クラスファイル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
20
Cubicle.Jockey

ヘルパーメソッドを作成できます。何かのようなもの:

public bool IsNumeric(string input) {
    int test;
    return int.TryParse(input, out test);
}
16
Bill

http://msdn.Microsoft.com/en-us/library/wkze6zky.aspx

メニュー:プロジェクト->参照の追加

クリック:アセンブリ、フレームワーク

Microsoft.VisualBasicにチェックマークを付けます。

OKを押します。

このリンクは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
Derek

C#7(.NET Framework 4.6.2)を使用すると、IsNumeric関数をワンライナーとして記述できます。

public bool IsNumeric(string val) => int.TryParse(val, out int result);

上記の関数は整数(Int32)に対してのみ機能することに注意してください。ただし、long、doubleなど、他の数値データ型に対応する関数を実装できます。

3
andersh

次のコードスニペットを試してください。

double myVal = 0;
String myVar = "Not Numeric Type";

if (Double.TryParse(myVar , out myNum)) {
  // it is a number
} else {
  // it is not a number
}
2
user353gre3

数字、大文字、小文字、通貨などのUnicodeカテゴリに対して文字列の文字をチェックできることは言及する価値があります。 Linqを使用して文字列の数値をチェックする2つの例を次に示します。

var containsNumbers = s.Any(Char.IsNumber);
var isNumber = s.All(Char.IsNumber);

明確にするために、上記の構文は次の短縮版です。

var containsNumbers = s.Any(c=>Char.IsNumber(c));
var isNumber = s.All(c=>Char.IsNumber(c));

MSDNのUnicodeカテゴリへのリンク:

nicodeCategory列挙

1
pasx

私は通常、拡張メソッドを使用してこのようなことを処理します。コンソールアプリに実装する方法の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&^ * ^は数値ではありません。

注意、RegExを使用して番号を確認する他のいくつかの方法があります

1
Eric Scherrer