|
■No88685 (しろ さん) に返信 > VBだと↓の処理で Label1.Textが10になったら
10 ではなく "10" ですよね。 Text プロパティは String 型ですから。
> いつもVBばかり使っていたのでわかりませんが
もしも Visual Basic の時に、 Dim count As Integer = 1 count += 1 Label1.Text = count '★String型のプロパティに Integer 値が代入されている If Label1.Text = 10 Then '★String型の値と Integer 値が比較されている のようなコードが書かれていたのだとしたら、それは間違いです。
比較するデータ型を正しく合わせて Dim count As Integer = 1 count += 1 Label1.Text = CStr(count) '☆Integer 値を String 型に変換してから代入 If Label1.Text = "10" Then '☆String 値同士の比較 もしくは Dim count As Integer = 1 count += 1 Label1.Text = CStr(count) '☆Integer 値を String 型に変換してから代入 If count = 10 Then '☆Integer 値同士の比較 と書かねばなりません。
> If Label1.Text = 10 Then C# では、比較式の両辺でデータ型が厳密に区別されるため、 if (label1.Text == "10") { // string 型同士の比較 あるいは、 int val; int.TryParse(label1.Text, out val); if (val == 10) { // int 型同士の比較 などとします。
※「==」が C# の比較演算子であることは調査済みかと思います。
■No88704 (しろ さん) に返信 > option strict onって初めて見るのですがどうやって使うものかもわかりません Option Strict On は Visual Basic 用の構文なのですが、 ざっくり言えば、データ型を厳密に取り扱うためのオプション設定です。
VB で Option Strict On を有効にしていると、 If Label1.Text = 10 Then のようなコードはコンパイルエラーとなり、 If Label1.Text = "10" Then のように書くことが求められるようになります。
Option Strict On がどういう機能なのかは、リファレンスにも記載されていますし、 Google 等で検索しても出てきますので、幾つか探して読んでみて、 その中で自分にとって理解しやすい記事を探してみてください。
C# は、型を厳密に比較する言語ですので、 まずは VB で「Option Strict On」モードでコンパイルが通るように コードを見直しておくと、C# への移植が楽になると思います。
> // 閏年 (うるう年) かどうか判断する > if (DateTime.IsLeapYear(2008)) {
IsLeapYear は「メソッド(method)」です。
IsLeapYear メソッドとは、西暦を『int 型の引数』として 1 つ受け取り、 それが閏年なら true、平年なら false を『bool 型の戻り値』として返します。
メソッドは一般的に、動詞または動詞句で記載されますが、 Is が be動詞であることは言わずもがな。 そして leap year とは、英語で「閏年」を指す言葉です。
>> If Label1.Text = 10 Then
この場合の Text は「プロパティ(property)」ですよね。
コントロールの Text プロパティは『string 型の値』を管理しており、 そのコントロールに表示されている文字列を取得あるいは設定するためのものです。 (メソッドとプロパティの違いは分かりますか?)
> if (label1.Text(10)) { C# では、プロパティが引数を持たない仕様なので、 プロパティの後に丸括弧が続くことは、(ほぼ)ありません。
コンパイルエラーにならないように比較するには、 既に上記でも説明したように、比較演算子の == を用いて if (label1.Text == "10") { などとします。
Text の戻り値は String/string であり、 "10" というリテラルも String/string なので、 == 演算子で比較することができるというわけです。
比較した結果は Boolean/bool となりますので、 if ステートメントの条件式として記述できます。
なお、string 値を >, >=, <, <= で比較することはできません。
文字列同士の大小比較が必要な場合には、 if (label1.Text.CompareTo("10") < 0) あるいは if (string.Compare(label1.Text, "10", false) < 0) { のように、String 型が持つ比較メソッドを利用することができます。 これらは VB における「StrComp 関数」に相当する機能ですね。
もしくは、テキストの中身が数字であるのなら、先の If count = 10 Then if (val == 10) { などの解説で述べたように、数値比較に置き換えることもできます。 たとえば、数値型変数に TryParse してから if (int.TryParse(label1.Text, out intVal) && intVal < 10) { のように比較するといった感じですね。
※「&&」が VB でいうところの AndAlso 演算子の意味であることは調査済みかと思います。
ちなみに、Option Strict Off モードの Visual Basic では If Label1.Text = "10" Then と書くべきところを、誤って If Label1.Text = 10 Then としていても実行できてしまいます。
しかし後者は、実際には If CDbl(Label1.Text) = 10.0 Then という意味で処理されることになるため、厳密には違う意味となります。 ※たとえば、.Text が 空文字列だった場合の動作が異なりますね。
後者では、文字列と数値との比較のために『暗黙の型変換』が行われることで 文字列側を Double に変換してから比較される仕様になっています。
|