(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;
- }
- }
- }
- }
- }
(サンプルプログラム実行結果)
>目次にもどる