泥庭

2013年6月10日

System.Charの比較

Filed under: .NET — タグ: , — yone64 @ 11:26 PM

最近、VB.NETやってます。で、System.Charの扱いがC#とVB.NETで結構異なってビックリしたので、まとめ。
なお、すべてOption Strict Onでの結果です。

StringとCharの暗黙的変換。

C#erからすると大変気持ち悪い構文ですが、下記構文はコンパイルが通り、Equalが表示されます。

Dim chr As Char = "a"c
Dim str As String = "a"

If (chr = str) Then
    Console.WriteLine("Equal")
Else
    Console.WriteLine("Not Equal")
End If

当然ながら、C#で同等の記述の下記は、コンパイルエラーとなります。

char chr = 'a';
string str = "a";

if (chr == str)
{
    Console.WriteLine("Equal");
}
else
{
    Console.WriteLine("Not Equal");
}

これは、何が起こっているか気になりますね。って事で、ILSpyの出番です。

Dim chr As Char = "a"
Dim str As String = "a"
Dim flag As Boolean = Operators.CompareString(Conversions.ToString(chr), str, False) = 0
If flag Then
    Console.WriteLine("Equal")
Else
    Console.WriteLine("Not Equal")
End If

文字列比較のためにOperators.CompareStringメソッドが呼ばれてます。なおかつConversions.ToStringメソッドでCharからStringへの変換が暗黙的に行われているようです。

IntegerとCharの変換

C#でのchar型は数値として扱うことが可能で、int等の数値型へ暗黙的に変換が行えます。

char c = 'a';
int i = c;
Console.WriteLine(i);   // 97 が表示される

しかし、VB.NETではあくまでも文字としてしか扱えないようです。

Dim c As Char = "a"c
Dim i As Integer = c    ' コンパイルエラー

Console.WriteLine(i)

きっとVB.NETやってる人にとっては常識なんだろうな。

コメントする »

まだコメントはありません。

RSS feed for comments on this post. TrackBack URI

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

WordPress.com で無料サイトやブログを作成.

%d人のブロガーが「いいね」をつけました。