C#のInt32クラス:メソッドを熟知してコーディングを極める!
1. はじめに
C#のInteger(Int32)クラスは、整数型のデータを扱うために非常に多くの便利なメソッドを提供しています。
この記事では、その中でも特に使用頻度の高い「Parse」、「TryParse」、「ToString」、「Equals」、「GetHashCode」、「GetType」、「CompareTo」、「MaxValue」、「MinValue」、「ToByte」のメソッドをピックアップし、実際のコード例とともにその使い方を詳しく解説していきます。
KindleUnlimited会員であれば、全ての本をご覧頂けます。 Linqを理解すれば、C#プログラミングの世界が変わる 第1版
2. 文字列と整数の変換:ParseとTryParse
まず初めに、「Parse」メソッドと「TryParse」メソッドの違いについて解説します。
これらのメソッドは、文字列を整数に変換する際に使用しますが、その動作には微妙な違いがあります。
ポイント
ソースコード例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
using System; class Program { static void Main() { string strNum = "12345"; int num; // Parseメソッド num = int.Parse(strNum); Console.WriteLine($"Parse: {num}"); // TryParseメソッド bool result = int.TryParse(strNum, out num); Console.WriteLine($"TryParse: {num}, Success: {result}"); } } |
出力結果
Parse: 12345 TryParse: 12345, Success: True
2. GetHashCode: ユニークなインスタンスを識別
GetHashCodeメソッドは、オブジェクトのハッシュコードを取得するために使用されます。
ハッシュコードは、データ構造においてオブジェクトを効率よく検索する際にキーとして使用され、通常、異なるオブジェクトは異なるコードを持つべきです。
ハッシュコードは、オブジェクトを一意に識別する整数値です。
同じオブジェクトは常に同じハッシュコードを返すべきですが、異なるオブジェクトが異なるハッシュコードを持つことは保証されていません。
ソースコード例
1 2 3 4 5 6 7 8 9 10 11 12 13 |
using System; class Program { static void Main() { int num1 = 123; int num2 = 123; Console.WriteLine(num1.GetHashCode()); Console.WriteLine(num2.GetHashCode()); } } |
出力結果
123 123
3. GetType: オブジェクトの型を取得
GetTypeメソッドは、現在のインスタンスのTypeオブジェクトを返します。
これはオブジェクトの実行時の型を知りたい場合、例えばリフレクションを使用してオブジェクトのプロパティやメソッドを動的に取得したい場合に役立ちます。
その通りです、サルモリさん!
具体的には、オブジェクトのメタデータを取得し、実行時にそのオブジェクトのメソッドを呼び出したり、プロパティを取得・設定することができます。
ソースコード例
1 2 3 4 5 6 7 8 9 10 |
using System; class Program { static void Main() { int num = 123; Console.WriteLine(num.GetType()); } } |
出力結果
System.Int32
4. CompareTo: オブジェクトの順序付けの比較
CompareToメソッドは、現在のインスタンスと別のオブジェクトの相対的な順序を決定します。
このメソッドは、比較対象のオブジェクトが現在のインスタンスの前か後か、または同じ順序かを決定します。
もちろんです!
CompareToメソッドが0を返した場合、2つのオブジェクトは等しいとみなされます。返り値が正であれば、現在のインスタンスが2番目のオブジェクトよりも順序が後ろであり、負であればその逆となります。
ソースコード例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
using System; class Program { static void Main() { int num1 = 123; int num2 = 456; Console.WriteLine(num1.CompareTo(num2)); Console.WriteLine(num2.CompareTo(num1)); Console.WriteLine(num1.CompareTo(num1)); } } |
出力結果
-1 1 0
5. ToString: 数値を文字列に変換
ToStringメソッドは、現在のインスタンスの数値を等価の文字列表現に変換します。
これは、数値をログ出力やUIでの表示に使用する際に特に便利です。
その通りです、サルモリさん!
整数を文字列として扱う必要がある時、ToStringメソッドを利用します。さらに、書式を指定して文字列をフォーマットすることもできますよ!
ソースコード例
1 2 3 4 5 6 7 8 9 10 11 |
using System; class Program { static void Main() { int num = 12345; Console.WriteLine(num.ToString()); Console.WriteLine(num.ToString("N0")); } } |
出力結果
12345 12,345
6. Equals: オブジェクトの等価性を判断
Equalsメソッドは、現在のインスタンスが別のオブジェクトと等価であるかを判断します。
このメソッドは、2つのオブジェクトが同じ値を持っているかを確認するのに役立ちます。
まさにその通りです!
このメソッドはbool値、つまりtrueかfalseを返し、二つのオブジェクトが等しい場合にtrueを返します。
ソースコード例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
using System; class Program { static void Main() { int num1 = 123; int num2 = 123; int num3 = 456; Console.WriteLine(num1.Equals(num2)); Console.WriteLine(num1.Equals(num3)); } } |
出力結果
True False
7. ToByte: 数値をバイトに変換
実は、C#のint型にはToByteメソッドは存在しません。
ただし、Convert.ToByteメソッドを利用することでintをbyteに変換できます。このメソッドはオーバーフローをチェックし、範囲外の値をバイトに変換しようとすると例外をスローします。
もちろんです!下記のコードではintをbyteに変換していますが、値がbyteの範囲を超えていた場合、例外がスローされる例を示しています。
ソースコード例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
using System; class Program { static void Main() { int num1 = 100; int num2 = 300; byte b1 = Convert.ToByte(num1); try { byte b2 = Convert.ToByte(num2); } catch (OverflowException) { Console.WriteLine($"{num2} is out of range of the Byte type."); } Console.WriteLine(b1); } } |
出力結果
300 is out of range of the Byte type. 100
8. MaxValue: 整数型の最大値
int.MaxValueプロパティは、整数型(int)が保持できる最大の値を取得するために使用されます。
これはオーバーフローを防ぐためのチェックや、配列のインデックスに関する計算に利用することができます。
たとえば、整数型の変数が増加するコードを書いている場合、その値がint.MaxValueを超えないかチェックを行うのに使用します。
ソースコード例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
using System; class Program { static void Main() { int num = int.MaxValue - 5; for(int i = 0; i < 10; i++) { if(num == int.MaxValue) { Console.WriteLine("Maximum value reached!"); break; } num++; Console.WriteLine(num); } } } |
出力結果
2147483644 2147483645 2147483646 2147483647 Maximum value reached!
9. MinValue: 整数型の最小値
int.MinValueプロパティもMaxValueと同様に、int型が保持できる最小の値を取得します。
これは変数が特定の値未満にならないかをチェックする際や、負のインデックスが必要な計算に使用します。
OK、サルモリさん!こちらがMinValueを使用した一例です。
ソースコード例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
using System; class Program { static void Main() { int num = int.MinValue + 5; for(int i = 0; i < 10; i++) { if(num == int.MinValue) { Console.WriteLine("Minimum value reached!"); break; } num--; Console.WriteLine(num); } } } |
出力結果
-2147483643 -2147483644 -2147483645 -2147483646 -2147483647 -2147483648 Minimum value reached!
10. Parse: 文字列を整数に変換
int.Parseメソッドは、文字列を整数に変換するのに使用されます。
入力値などをプログラムが計算できる形に変換する際に役立ちます。ただし、このメソッドは変換できない文字列が渡されると例外をスローします。
例外とは、プログラムの実行中に発生する予期せぬ問題を指します。そして、例外がキャッチされないとプログラムがクラッシュします。
素晴らしい質問です!int.TryParseメソッドを使用することで、安全に文字列から整数への変換を試みることができます。失敗した場合もプログラムがクラッシュすることなく、falseが返されます。
ソースコード例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
using System; class Program { static void Main() { string validNumberString = "123"; string invalidNumberString = "abc"; if(int.TryParse(validNumberString, out int result1)) { Console.WriteLine($"Parsed number: {result1}"); } else { Console.WriteLine($"Failed to parse '{validNumberString}'"); } if(int.TryParse(invalidNumberString, out int result2)) { Console.WriteLine($"Parsed number: {result2}"); } else { Console.WriteLine($"Failed to parse '{invalidNumberString}'"); } } } |
出力結果
Parsed number: 123 Failed to parse 'abc'