Hatena::Diary

2009-06-10

型推論で記述してみた。

   '本来はこうしたかった。
        Dim c = Convert.ToInt32("AB", 16)
        Console.WriteLine(c)

型推論で遊んでみた。

        Dim i = "d"
        Dim str_g = CStr(i)
        Dim con_er = Convert.ToInt32(i, 16)
        Console.WriteLine(c & "となります。")
        '16進数から10進数へ
        '実行結果:13となります。

        Dim i = 15
        Dim y = CInt(i)
        Dim con_er = Convert.ToString(Convert.ToInt32(i), 16)
        Console.WriteLine(con_er & "となります。")
        '10進数から16進数へ
        ''実行結果:fとなります。

なんか型ないと変な感じ。

勉強中なので間違ってたらばんばんアドバイスください。

KK 2009/06/10 20:58 > VisualBasic2005,2008

2008はわかりますが、2005で?
オブジェクト階層ツリー上最上位のSystem.Objectの恩恵と型推論を混同していませんか?

n_saito1111n_saito1111 2009/06/10 21:08 カテゴリを昔設定したままにしてましたΣ
帰ったら直しますっ

KK 2009/06/10 21:19 付け加えです。

> Dim i = "d"
この時点でiはSystem.String。

> Dim str_g = CStr(i)
なぜSystem.Stringの変数iに対してCStr?

> Dim con_er = Convert.ToInt32(i, 16)
そんでもって、str_gは結局使われていない・・・?

> Console.WriteLine(c & "となります。")
2つ目のコードに関しては、変数cは定義されていないような・・・

> Dim i = 15
こちらもこの時点でiはSystem.Int32。

> Dim y = CInt(i)
System.Int32型の変数iに対してCInt?

> Dim con_er = Convert.ToString(Convert.ToInt32(i), 16)
そして変数yは使ってないんですね。うーん、なんだろう?
それと、ここでの変数iはToInt32しなくても、もともとSystem.Int32っすよね。

うーん、老婆心ながらn_saito1111さんの意図どおりのサンプルなのかなーという気が・・・

> '本来はこうしたかった。
> Dim c = Convert.ToInt32("AB", 16)
> Console.WriteLine(c)
本来もなにも2008ならこれもローカル型推論に当たるんじゃないでしょうか?
VBは門外漢なのであまり詳しくありませんので、ちょっと少し自信がないですが。

あ、ひとつ前の投稿の
>>オブジェクト階層ツリー上最上位のSystem.Objectの恩恵と型推論を混同していませんか?
プラス、遅延バインドの恩恵ですね。Option StrictをOnにすると2005では多分エラーになるんで。
これに関してはカテゴリの設定ミスのようなので、結果的に無用な突っ込みでしたね。ごめんなさい。

ゲスト


トラックバック - http://d.hatena.ne.jp/n_saito1111/20090610/1244633490