文字列を数値に変換する方法 (C# プログラミング ガイド)
string
を数値に変換するには、数値型 (int
、long
、double
など) で見つかる Parse
または TryParse
メソッドを呼び出すか、System.Convert クラスのメソッドを使用します。
TryParse
メソッド (たとえば int.TryParse("11", out number)
) または Parse
メソッド (たとえば var number = int.Parse("11")
) を呼び出す方がいくらか効率的で簡単です。 IConvertible を実装している一般的なオブジェクトでは、Convert メソッドを使用するのがより便利です。
文字列に含まれていると思われる数値型 (System.Int32 型など) の Parse
または TryParse
メソッドを使用します。 Convert.ToInt32 メソッドは、Parse を内部的に使用します。 Parse
メソッドからは、変換された数値が返されます。TryParse
メソッドからは変換が成功したかどうかを示すブール値が返され、変換された数値は out
パラメーターで戻されます。 文字列の形式が無効である場合、Parse
では例外がスローされますが、TryParse
では false
が返されます。 Parse
メソッドを呼び出すときは常に例外処理を使用し、解析操作が失敗したときの FormatException をキャッチする必要があります。
Parse または TryParse メソッドを呼び出す
文字列の先頭と末尾の空白文字は、Parse
および TryParse
メソッドによって無視されますが、その他のすべての文字は、適切な数値型 (int
、long
、ulong
、float
、decimal
など) を形成する文字である必要があります。 数値を形成する文字列内に空白文字があると、エラーになります。 たとえば、"10"、"10.3"、または " 10 " を解析するために decimal.TryParse
を使用することはできますが、"10X"、"1 0" (埋め込まれたスペースに注意)、"10 .3" (埋め込まれたスペースに注意)、"10e1" (この場合は float.TryParse
を使用) などからこのメソッドを使用して 10 を解析することはできません。 値が null
または String.Empty の文字列は正常に解析できません。 String.IsNullOrEmpty メソッドを呼び出すことで、解析を試みる前に null または空の文字列を確認できます。
次の例は、Parse
および TryParse
の呼び出しの成功例と失敗例の両方を示しています。
using System;
public static class StringConversion
{
public static void Main()
{
string input = String.Empty;
try
{
int result = Int32.Parse(input);
Console.WriteLine(result);
}
catch (FormatException)
{
Console.WriteLine($"Unable to parse '{input}'");
}
// Output: Unable to parse ''
try
{
int numVal = Int32.Parse("-105");
Console.WriteLine(numVal);
}
catch (FormatException e)
{
Console.WriteLine(e.Message);
}
// Output: -105
if (Int32.TryParse("-105", out int j))
{
Console.WriteLine(j);
}
else
{
Console.WriteLine("String could not be parsed.");
}
// Output: -105
try
{
int m = Int32.Parse("abc");
}
catch (FormatException e)
{
Console.WriteLine(e.Message);
}
// Output: Input string was not in a correct format.
const string inputString = "abc";
if (Int32.TryParse(inputString, out int numValue))
{
Console.WriteLine(numValue);
}
else
{
Console.WriteLine($"Int32.TryParse could not parse '{inputString}' to an int.");
}
// Output: Int32.TryParse could not parse 'abc' to an int.
}
}
次の例は、先頭に数字 (16 進数文字を含む)、末尾に数字以外の文字を含むと予想される文字列を解析する 1 つのアプローチを示しています。 TryParse メソッドを呼び出す前に、文字列の先頭から新しい文字列に有効な文字を割り当てます。 解析対象の文字列には少数の文字が含まれるので、例では String.Concat メソッドを呼び出して新しい文字列に有効な文字を割り当てます。 より大きな文字列の場合は、代わりに StringBuilder クラスを使用できます。
using System;
public static class StringConversion
{
public static void Main()
{
var str = " 10FFxxx";
string numericString = string.Empty;
foreach (var c in str)
{
// Check for numeric characters (hex in this case) or leading or trailing spaces.
if ((c >= '0' && c <= '9') || (char.ToUpperInvariant(c) >= 'A' && char.ToUpperInvariant(c) <= 'F') || c == ' ')
{
numericString = string.Concat(numericString, c.ToString());
}
else
{
break;
}
}
if (int.TryParse(numericString, System.Globalization.NumberStyles.HexNumber, null, out int i))
{
Console.WriteLine($"'{str}' --> '{numericString}' --> {i}");
}
// Output: ' 10FFxxx' --> ' 10FF' --> 4351
str = " -10FFXXX";
numericString = "";
foreach (char c in str)
{
// Check for numeric characters (0-9), a negative sign, or leading or trailing spaces.
if ((c >= '0' && c <= '9') || c == ' ' || c == '-')
{
numericString = string.Concat(numericString, c);
}
else
{
break;
}
}
if (int.TryParse(numericString, out int j))
{
Console.WriteLine($"'{str}' --> '{numericString}' --> {j}");
}
// Output: ' -10FFXXX' --> ' -10' --> -10
}
}
Convert メソッドを呼び出す
文字列を数値に変換するために使用できる Convert クラスのメソッドの一部を次の表に示します。
数値型 | メソッド |
---|---|
decimal |
ToDecimal(String) |
float |
ToSingle(String) |
double |
ToDouble(String) |
short |
ToInt16(String) |
int |
ToInt32(String) |
long |
ToInt64(String) |
ushort |
ToUInt16(String) |
uint |
ToUInt32(String) |
ulong |
ToUInt64(String) |
次の例では、Convert.ToInt32(String) メソッドを呼び出して、入力文字列を int に変換します。例では、このメソッドによってスローされる 2 つの最も一般的な例外である FormatException と OverflowException をキャッチします。 Int32.MaxValue を超えずに結果の数値を増やすことができる場合、例では結果に 1 を加算し、出力を表示します。
using System;
public class ConvertStringExample1
{
static void Main(string[] args)
{
int numVal = -1;
bool repeat = true;
while (repeat)
{
Console.Write("Enter a number between −2,147,483,648 and +2,147,483,647 (inclusive): ");
string? input = Console.ReadLine();
// ToInt32 can throw FormatException or OverflowException.
try
{
numVal = Convert.ToInt32(input);
if (numVal < Int32.MaxValue)
{
Console.WriteLine("The new value is {0}", ++numVal);
}
else
{
Console.WriteLine("numVal cannot be incremented beyond its current value");
}
}
catch (FormatException)
{
Console.WriteLine("Input string is not a sequence of digits.");
}
catch (OverflowException)
{
Console.WriteLine("The number cannot fit in an Int32.");
}
Console.Write("Go again? Y/N: ");
string? go = Console.ReadLine();
if (go?.ToUpper() != "Y")
{
repeat = false;
}
}
}
}
// Sample Output:
// Enter a number between -2,147,483,648 and +2,147,483,647 (inclusive): 473
// The new value is 474
// Go again? Y/N: y
// Enter a number between -2,147,483,648 and +2,147,483,647 (inclusive): 2147483647
// numVal cannot be incremented beyond its current value
// Go again? Y/N: y
// Enter a number between -2,147,483,648 and +2,147,483,647 (inclusive): -1000
// The new value is -999
// Go again? Y/N: n
GitHub Copilot を使用して文字列を数値に変換する
IDE で GitHub Copilot を使用して、C# で文字列を数値に変換するコードを生成できます。
Visual Studio 2022 バージョン 17.8 以降を使用している場合は Visual Studio で AI ドリブン GitHub Copilot を試して文字列を数値に変換するコードを生成できます。 次の例のように、Copilot チャット ウィンドウにプロンプトとして質問を送信します。 エディター ウィンドウ自体で インライン チャット を使用してプロンプトを送信することもできます。
Note
GitHub Copilot では AI を利用しているため、想定外のことや間違いが起こる可能性があります。 生成されたコードまたは提案を必ず確認してください。 GitHub Copilot の一般的な用途、製品への影響、人間の監視、プライバシーの詳細については、 GitHub Copilot に関する FAQを参照してください。
次のテキストは、Copilot Chat のプロンプトの例を示しています。
TryParse を使用して文字列 "123" を数値に変換する C# コードを生成します。 出力例を示します。
要件に従って文字列を使用するようにプロンプトをカスタマイズできます。
スラッシュ コマンド、ファイル、メソッド、クラスへの参照、スレッドなどのチャット機能を使用して、意図を設定し、スコープ指定されたコンテキストでより適切な回答を得ることができます。 IDE で開いている既存のファイルの場合は、 /generate code to convert the string string1 in #Filename to a number
とのインライン チャットを使用して GitHub Copilot にメッセージを表示できます。
次の出力は、Copilot Chat の応答の例を示しています。
Here is a C# code snippet to convert the string "123" to a number using TryParse:
using System;
class Program
{
static void Main()
{
string numberString = "123";
int number;
bool success = int.TryParse(numberString, out number);
if (success)
{
// Example output
Console.WriteLine("The converted number is: " + number);
}
else
{
Console.WriteLine("Conversion failed.");
}
}
}
When you run this code, the output will be:
The converted number is: 123
Copilot がコード ブロックを返す場合、応答には、コードをコピーする、コードを新しいファイルに挿入する、またはコード出力をプレビューするオプションが含まれます。
Note
結果は、サンプルの回答に示されているものと異なる場合があります。 AI モデルは非決定論的です。つまり、同じ質問を受けたときに異なる応答を返す場合があります。 これは、時間の経過に伴う学習と適応の進行、言語バリエーション、チャット履歴などのコンテキストの変更などが原因である可能性があります。
詳細については、以下を参照してください:
- GitHub Copilot セキュリティ センター
- Visual Studio の GitHub Copilot
- VS Code の GitHub Copilot
.NET