Asc
と Chr
は特別に定数として評価される
昨日、AscWとChrWは特別に定数として評価されるという記事を書いたのですが、Asc
と Chr
も特別に定数として評価される事を書いておきます。
Asc
と Chr
は実行時の文字コードにより返す値が変わります。そのため、実行時にならないと分からない範囲の文字は定数にできません。
AscW
と ChrW
は Unicode のコードポイントを返すと決まっているので Asc
と Chr
で定数にできない文字も定数にできます。
今は Unicode の時代なので、今後新規のコードで Asc
と Chr
を使うことはありません。
.NET Core 2.x にも当然 Asc
と Chr
は含められておらず、今後もサポートされることはおそらくないでしょう。
Asc
と Chr
も特別に定数として評価される事実は知識の片隅に置いておくと、もしかしたら Shift_JIS / cp932 など DBCS 前提の非常に古いコードのリーディングで役立つかもしれません。
コード
Module Program Private Sub WriteLine(Of T)(obj As T) Console.WriteLine($"{obj.GetType()} {obj}") End Sub Sub Main() Const ascA1 = Asc("A"c) WriteLine(ascA1) Const ascA2 = Asc("ABC") WriteLine(ascA2) ' 文字コードが実行時に決まるので定数にできない ' Const ascあ = Asc("あ") Dim ascあ = Asc("あ") WriteLine(ascあ) Const chr65 = Chr(65) WriteLine(chr65) ' 文字コードが実行時に決まるので定数にできない ' Const chr_32096 = Chr(-32096) Dim chr_32096 = Chr(-32096) WriteLine(chr_32096) Console.ReadKey() End Sub End Module
実行結果 (例)
System.Int32 65 System.Int32 65 System.Int32 -32096 System.Char A System.Char あ