Rainbow Engine

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

C#

C#のvarとは?型を調べる方法や制約事項についてもご紹介

投稿日:2020年12月15日 更新日:

<目次>

(1) C#のvarとは?型を調べる方法や制約事項についてもご紹介
 (1-1) C#のvarとは?
 (1-2) サンプルプログラム:varの基本動作確認#1
 (1-3) サンプルプログラム:varの基本動作確認#2
 (1-4) varの制約事項
 (1-5) varの使いどころ

(1) C#のvarとは?型を調べる方法や制約事項についてもご紹介

C#の初学者向けにvarとは何か?またvar変数に入っている値の型を調べる方法と、varの制約事項についてご紹介します。

(1-1) C#のvarとは?

「var」はC#において「暗黙型」の「静的」(static=コンパイル時に型が決定)な変数の定義に利用します。

C#では変数を「暗黙型」(implicit=定義時は型が未決)か「明示型」(explicit=明示的に型を宣言)で定義する事ができますが、その中でも「var」キーワードで定義した「暗黙型」の変数はコンパイル時に型の判断を行い、自動で適切な型にキャストを行います。

「暗黙型」の主な使いどころとして「何のデータ型が来るか不明」な時や「複数のデータ型が配列に混じる」ケースなどで非常に力を発揮します(これらの例は後の節でサンプルプログラムを掲載)。

varを使った変数の宣言は、通常のデータ型と全く同じように行います。

(例)

//暗黙型(var)
var name = "This is Explicitly typed";
//明示型(string)
string name = "This is Implicitly typed";

そしてvar変数の「型」は値を変数に代入した時に決定され、値を代入後は通常の変数と同様に利用できます。

目次にもどる

(1-2) サンプルプログラム:varの基本動作確認#1

次のプログラムはvar型の変数に対して、様々なデータ型の値を代入して、実際にその通りの型になっているか(正しく推定できたか)を確認しています。

(サンプルプログラム1)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace RP_IT0198_var_usage
{
 class Program
 {
  static void Main(string[] args)
  {
   var varInt = 999;
   var varDouble = 999.999;
   var varDecimal = 999m;
   var varChar = '1';
   var varString = "12345";
   var varBool = true;
   Console.WriteLine("{0}\n{1}\n{2}", varInt.GetType(), varDouble.GetType(), varDecimal.GetType());
   Console.WriteLine("{0}\n{1}\n{2}", varChar.GetType(), varString.GetType(), varBool.GetType());
   Console.Read();
  }
 }
}

(図121)実行結果

目次にもどる

(1-3) サンプルプログラム:varの基本動作確認#2

次のサンプルはステートメント内で使用している例です。
(前半部分)
はvar変数にint型の配列を代入し、foreachステートメントを使って各要素にアクセスしています。
(後半部分)
StreamReaderクラスで「.log」ファイルを読み込んだ結果をvar変数で受け取っています(typeは「System.IO.StreamReader」)。

(サンプルプログラム2)

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace RP_IT0198_var_usage
{
 class Program
 {
  static void Main(string[] args)
  {
   //##(1)foreachステートメントでの利用
   //## (1-1)varにint型の配列を代入し、
   var IntArr = new[] { 1, 3, 5, 7, 9 };
   Console.WriteLine("### Type of IntArr is "+ IntArr.GetType());
   //## (1-2)foreachステートメントでループして要素を取得
   foreach (var num in IntArr)
   {
    Console.WriteLine("{0}", num);
   }

   //##(2)usingステートメントでの利用
   using (var logfile = new StreamReader(@"C:\Temp2\IT0198\sample.log"))
   {
    Console.WriteLine("### Type of logfile is " + logfile.GetType());
    string lineinfo;
    while ((lineinfo = logfile.ReadLine()) != null)
    {
     Console.WriteLine(lineinfo);
    }
   }
  }
 }
}

(図131)実行結果

目次にもどる

(1-4) varの制約事項

varを使用するにはいくつかの制約事項があるので、それらについても触れておきます。

■使用できるケース
・varが使用できるのはローカル変数が同じステートメント内(if、using、try-catch、for、foreachなど振る舞いを決める記述)で宣言~初期化されるケースのみです。

■使用できないケース&制限事項
・クラススコープの変数としては利用不可(クラスのメンバ変数)。
・クラス内のメソッドの戻り値としては利用できません。
・プロパティ(private変数をget()やset()で読み書きする仕組み)のデータ型としては利用できません。
・nullには初期化できません。
・同一ステートメント内で利用できるvarは一つです。

目次にもどる

(1-5) varの使いどころ

varが非常に活躍するケース(型が分からない場合)の具体的な例について、別だしの記事(下記)でご紹介しています。

https://rainbow-engine.com/csharp-var-usage/

目次にもどる

Adsense審査用広告コード


Adsense審査用広告コード


-C#

執筆者:


comment

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

関連記事

C#のIComparerの実装方法や用法について(サンプルプログラムあり)

<目次> (1) C#のIComparerの実装方法や用法について  (1-1) IComparerの概要  (1-2) STEP0:比較をするクラスの定義  (1-3) STEP1:ICompare …

C#のIEnumerableとは?使い方(foreachでの要素取り出し)を順を追って解説

<目次> (1) C#のIEnumerableとは?使い方(foreachでの要素取り出し)を順を追って解説  (1-1) IEnumerableとは?  (1-2) IEnumerableの実装の流 …

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でビュー(View)に複数のモデル(Model)を連携する方法

  <目次> (1) ASP.NETでビュー(View)に複数のモデル(Model)を連携する方法  (1-1) やりたい事の整理  (1-2) ViewModelを使った複数モデルの連携 …

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

<目次> (1) C#のintに?「はてな」(question mark)が付いている意味について  (1-1) 「int?」とは?  (1-2) 「int?」の型について  (1-3) 「int?」 …

  • English (United States)
  • 日本語
Top