(1) C#のintに?「はてな」(question mark)が付いている意味について
(1-1) 「int?」とは?
(1-2) 「int?」の型について
(1-3) 「int?」のメソッド引数での利用
(1) C#のintに?「はてな」(question mark)が付いている意味について
(1-1) 「int?」とは?
型の後ろに「?」を付ける事によって「nullを許容する」変数の性質を持つようになります。例えば通常のint型にnullを代入できない(コンパイルエラーになる)ですが、「int?」にする事でnullを許容する事ができます。
(例1)通常のintにnullを代入するとエラーになる
//コンパイルエラーになる int a2 = null
(例2)int?にはnullを代入できる
//正常動作する int a4 = null
ちなみに、別の書き方として「Nullable<int>」でも同じ意味になります。
(例3)Nullable<int>と記載も可能
//正常動作する Nullable<int> a6 = null
(図111)
(1-2) 「int?」の型について
「int?」や「Nullable<int>」は、システム的には「System.Nullable<T>」型のインスタンスを作っており、typeofで型チェックすると「System.Nullable`1[System.Int32]」となっています。
//実行内容(typeofによる型の確認) Console.WriteLine(typeof(int)); Console.WriteLine(typeof(int?)); Console.WriteLine(typeof(Nullable)); //実行結果 System.Int32 System.Nullable`1[System.Int32] System.Nullable`1[System.Int32]
(図121)
(1-3) 「int?」のメソッド引数での利用
この「int?」型は通常のint型と同様にメソッドの引数や戻り値の型としても利用できます。
(サンプルプログラム)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace RP_IT0xxx_Cs_int_question_ConsoleApp2 { class Program { static void Main(string[] args) { Console.WriteLine("test1 = " + test_convert(null)); //Nullの分岐に入る→9999 Console.WriteLine("test2 = " + test_convert("12345")); //変換成功 →12345 Console.WriteLine("test3 = " + test_convert("12345")); //変換失敗(全角混入)→8888 } //★int?をメソッドの戻り値として利用 static int? test_convert(string value) { int number; //引数の文字列がNullか空白か?をチェック if (string.IsNullOrEmpty(value)) { //Nullか空白なら9999を返却 return 9999; } else { //Nullか空白でない場合はTryParseによりStringからint型に変換 bool success = int.TryParse(value, out number); //変換成功の場合 if (success) { return number; } //変換失敗の場合 else { return 8888; } } } } }
(サンプルプログラム実行結果)
>目次にもどる