1.C#、VB.NET-6.型
今回は値型⇔string型です。共通認識は前回と一緒です。 VB.NETのCIntやCDecなどのC●●●は、CTypeと等価なので全てCTypeで検証 時間計測はSystem.Diagnostics名前空間のStopwatchクラスを利用 繰り返し回数maxは10,000,000回とする それぞれを3回ずつ実行する…
以前型推論を説明しましたが、これが乱用されてしまうと問題になりそう、と思うのは正しい感覚です。ただし、時と場合によっては型推論は非常に有用ですので使える場面においては積極的に使っていこうじゃないか、というのが今回のテーマです。 Variant型で…
暗黙的に型付けする変数のことを型推論と言います。C#はvarキーワードを利用します。 //通常の書き方 TestClass cls = new TestClass(); //型推論 var cls = new TestClass(); VB.NETはDimキーワードのみにしてAs以降の型を指定しないと型推論となります。 '…
おおむね型変換が出そろったところで、「どれを使うか?」をシリーズで考えてみます。今回はstring型⇔値型です。 なお、以下は共通認識とします。 VB.NETのCIntやCDecなどのC●●●は、CTypeと等価なので全てCTypeで検証 時間計測はSystem.Diagnostics名前空間…
型変換は何を使う?(その①)の続きです。 sasaki816.hatenablog.com 数値型で有意なParse、TryParse 数値型はnullは許容しませんので、関数化できるならTryParse一択だと思います。但し、string型からの変換のみ利用できることと、TryParseはout引数を持ち…
型を覚えるときに必ずセットで出てくる型変換(キャスト)の話です。実は、型変換はC#とVB.NETでだいぶ違います。C#は変換方法がだいたい決まっているのですが、VB.NETでは変換方法がありすぎて、プログラマーによってまちまちなのです。そのため初学者はど…
null許容型を利用する上で重要なnull判定方法をいくつか説明します。 int? a = null; Dim a As Integer? = Nothing 等価(Is)による条件判断 if文による等価評価(Is)を行います。 if (a == null) { Console.WriteLine("nullだ"); } else { Console.WriteL…
値型がnullを許容しないことは分かりました。しかし、アプリケーション構築上、nullを許容しなければいけない場面もあります。そこで登場したのがnull許容型です。null許容型は値型の後ろに「?」をつけるだけです。しかし、元々許容型である参照型やstring…
参照型はnullを許容していますが、値型はどうでしょうか。実はここでもC#とVB.NETで微妙に挙動が異なります。 C#におけるnull代入時の挙動 参照型はnullを許容していますが、値型はnull非許容です。つまり、以下のような構文はそもそもコンパイルエラーとな…
型変換でよく出てくる用語の一つに「ボックス化(又はボクシング)」があります。よくボックス化はコストがかかるとか言われますが、一体何の意味か分かりますか? 値型を参照型に変換する行為 簡単に言うとそういうことです。例えばint型をobject型に変換す…
TryParseメソッドは、数値ではなくカンマ区切りの数値を渡したときの挙動が型によって微妙に違います。よく使われるint、long、double、decimalで説明します。 int value; Console.WriteLine(int.TryParse("1,234", out value)); //false long value; Consol…
バインディング(型を結びつけること)には事前バインディングと遅延バインディングの2種類あります。これもC#とVB.NETで微妙に動作(というかお作法)が違います。はじめに事前バインディングと遅延バインディングの違いを簡単に説明します。読んで字のご…
string型はプリミティブ型に分類されますが、参照型です。よく値型と勘違いされますが誰がなんと言おうと参照型です。 でも、何も考えず以下のようなコードを書くとどうでしょう。結果としては値型のような挙動になります。 string str1 = "Hoge"; string st…
プログラミングを学習すると必ずやらなければならない、そしてよく分からない?値型と参照型の違いについて。このブログは初学者向けの教本では無く、初学者に説明した中でよく分かってもらえない・理解してもらえない分野のみを抜粋して記録するためのもの…