C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.85129 の関連記事表示

<< 0 >>
■85129  Re[3]: C#のカウント
□投稿者/ 魔界の仮面弁士 -(2017/09/12(Tue) 11:53:29)
    No85125 (大谷刑部 さん) に返信
    > そもそもVBとC#でできることにそんなに差はないかと。

    とはいえ、言語仕様の微妙な差異は少なからずあるわけで。


    今回の質問の意図は、VB のコードを真似て
     // C#
     label1.Text = label1.Text + 1;
    と書いて見た場合に、数値加算ではなく、文字列連結になってしまい、結果として
     ' Visual Basic
     Label1.Text = Label1.Text & 1
    に相当する処理になってしまったことが発端と推察します。


    というのも、文字列型の値と整数型の値を + 演算した場合、
    C# では string 型の連結処理として扱われますが、
    VB では Double 型の加算処理として扱われる仕様だからです。
    (この仕様は Option Strict の On/Off とは無関係です)


    ついにで書いておくと、"123" * 2 という演算を行った場合、
    C# はコンパイルエラーとなりますが、
    Visual Basic は Double 型の 246 となり、
    PowerShell は String 型の "123123" になります。

    また、除算演算子の仕様も VB と C# とで異なっていますね。


    >>  Label1.Text = CStr(CDbl(Label1.Text) + 1.0)
    >> に相当するコードとして処理されることになります。
    > むしろこのやり方の方がVB6チックな感じが。
    VB6 だと、Label1.Text ではなく Label1.Caption になりそうですが、それはさておき。

    個人的にはカウンター変数を用意するべきと思っていますが、
    元の VB コードを真似て、あえてラベル単体でカウントさせるなら、
     label1.Text = 1 + int.Parse(label1.Text) + "";
    などと書くこともできそうです。


    > 非明示変換が発生するのでやるとしても整数のみの方がよいでしょう。
    > 小数で型変換を指定しない場合は2進型であるdoubleで内部処理されるので
    > 端数ずれの元です。
    カウント値が 整数型 であるべきという点についてはそのとおりですね。

    ただ端数といっても、double 型の精度は、2進数で52+1桁分あるので、
    小数値を使わずに『整数値』に限定して扱う分には、
    double 型でも誤差が生じることはありません。(10進数で15桁以下であれば)
記事No.85118 のレス /過去ログ145より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -