Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

C#

C#のintに?「はてな」(question mark)が付いている意味について

投稿日:2020年11月16日 更新日:

<目次>

(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;
        }
      }
    }
  }
}

(サンプルプログラム実行結果)

目次にもどる

Adsense審査用広告コード


Adsense審査用広告コード


-C#

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

C#のDB接続時のエラー(provider: Named Pipes Provider, error: 40 – Could not open a connection to SQL Server)

<目次> (1) 記事の目的  (1-1) エラー概要  (1-2) エラー原因  (1-3) エラー対策   (1-3-1) SQLServer:リモート接続を有効化   (1-3-2) SQLSe …

ASP.NETのActionResultの戻り値の種類について

  <目次> (1) ASP.NETのActionResultの戻り値の種類について  (1-1) はじめに  (1-2) ASP.NETのActionResultの戻り値の種類  (1-3 …

C#のIListとは?Listとの違いや使いどころもご紹介

<目次> (1) C#のIListとは?Listとの違いや使いどころもご紹介  (1-1) IListやIList<T>とは?  (1-2) Listとの違い  (1-3) IListの利 …

ASP.NET MVCのルーティングの基本

<目次> (1) ASP.NET MVCのルーティングの基本  (1-1) 構文  (1-2) サンプルプログラム   ・RouteConfig.cs   ・Controller   ・View  ( …

C#のエラー「CS1069~このアセンブリへの参照を追加する事を検討してください」の対処方法+実際のソース例も掲載

<目次> (1) C#のエラー「CS1069~このアセンブリへの参照を追加する事を検討してください」の対処方法  (1-1) 発生状況・エラーメッセージ  (1-2) 原因  (1-3) 対処法 (1 …

  • English (United States)
  • 日本語
Top