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

>目次にもどる