Loading [MathJax]/extensions/tex2jax.js

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を代入するとエラーになる

  1. //コンパイルエラーになる
  2. int a2 = null

(例2)int?にはnullを代入できる

  1. //正常動作する
  2. int a4 = null

ちなみに、別の書き方として「Nullable<int>」でも同じ意味になります。
(例3)Nullable<int>と記載も可能

  1. //正常動作する
  2. Nullable<int> a6 = null

(図111)

目次にもどる

(1-2) 「int?」の型について

「int?」や「Nullable<int>」は、システム的には「System.Nullable<T>」型のインスタンスを作っており、typeofで型チェックすると「System.Nullable`1[System.Int32]」となっています。

  1. //実行内容(typeofによる型の確認)
  2. Console.WriteLine(typeof(int));
  3. Console.WriteLine(typeof(int?));
  4. Console.WriteLine(typeof(Nullable));
  5.  
  6. //実行結果
  7. System.Int32
  8. System.Nullable`1[System.Int32]
  9. System.Nullable`1[System.Int32]

(図121)

目次にもどる

(1-3) 「int?」のメソッド引数での利用

この「int?」型は通常のint型と同様にメソッドの引数や戻り値の型としても利用できます。

(サンプルプログラム)

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace RP_IT0xxx_Cs_int_question_ConsoleApp2
  8. {
  9. class Program
  10. {
  11. static void Main(string[] args)
  12. {
  13. Console.WriteLine("test1 = " + test_convert(null)); //Nullの分岐に入る→9999
  14. Console.WriteLine("test2 = " + test_convert("12345")); //変換成功 →12345
  15. Console.WriteLine("test3 = " + test_convert("12345")); //変換失敗(全角混入)→8888
  16. }
  17. //★int?をメソッドの戻り値として利用
  18. static int? test_convert(string value)
  19. {
  20. int number;
  21. //引数の文字列がNullか空白か?をチェック
  22. if (string.IsNullOrEmpty(value))
  23. {
  24. //Nullか空白なら9999を返却
  25. return 9999;
  26. }
  27. else
  28. {
  29. //Nullか空白でない場合はTryParseによりStringからint型に変換
  30. bool success = int.TryParse(value, out number);
  31. //変換成功の場合
  32. if (success)
  33. {
  34. return number;
  35. }
  36. //変換失敗の場合
  37. else
  38. {
  39. return 8888;
  40. }
  41. }
  42. }
  43. }
  44. }

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

目次にもどる

Adsense審査用広告コード


Adsense審査用広告コード


-C#

執筆者:


comment

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

関連記事

ASP.NET MVCでformをSubmitする方法

<目次> (1) ASP.NET MVCでformをSubmitする方法  (1-1) 概要  (1-2) HTMLを使ってformをsubmitする方法  (1-3) サンプルプログラム  (1-4 …

C#で型をStringからintに変更する方法~TryParseメソッドによる型変換~

<目次> (1) C#で型をStringからintに変更する方法  (1-1) 構文  (1-2) サンプルプログラム  (1-3) プログラム補足「'{0}’や'{1}’」に …

C#で見るgetやsetとは?プロパティの基礎についてご紹介

<目次> (1) C#で見るgetやsetとは?プロパティの基礎についてご紹介  (1-1) プロパティとは?  (1-2) プロパティの構文  (1-3) サンプルプログラム  (1-4) プロパテ …

C#のスレッド(Thread)とは?概要やサンプルプログラムをご紹介

  <目次> (1) C#のスレッド(Thread)とは?概要やサンプルプログラムをご紹介  (1-1) 概要   (1-1-1) スレッドのライフライクルについて   (1-1-2) ma …

C#のデリゲートが分からない・・を解決!初心者向けになるべく分かり易く説明してみた

<目次> (1) C#のデリゲートが分からない・・を解決!初心者向けになるべく分かり易く説明してみた  (1-1) デリゲートとは?「関数へのポインタ」だけでは説明しきれない・・  (1-2) デリゲ …

  • English (United States)
  • 日本語
S