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

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

C# と VB.NET の入門サイト

C# のifについて教えてください

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■88685 / inTopicNo.1)  C# のifについて教えてください
  
□投稿者/ しろ (1回)-(2018/09/20(Thu) 08:04:32)

分類:[.NET 全般] 

いつもVBばかり使っていたのでわかりませんが
VBだと↓の処理で Label1.Textが10になったら
処理されるプログラムですがC#だとどのように書けば
10になったら処理されるプログラムになるんでしょうか?
If Label1.Text = 10 Then

End If
引用返信 編集キー/
■88689 / inTopicNo.2)  Re[1]: C# のifについて教えてください
□投稿者/ WebSurfer (1592回)-(2018/09/20(Thu) 09:43:05)
No88685 (しろ さん) に返信

丸投げしないで、自分でコードを書いて試してみて、期待通りいかなければ
そのノードをアップして、どこがどう期待と違うのか書いてください。

ところで、「型」というものを意識してコードを書けますか?

option strict on の設定でコードを書いたことがありますか? なければ
一度やってみてください。
引用返信 編集キー/
■88704 / inTopicNo.3)  Re[2]: C# のifについて教えてください
□投稿者/ しろ (2回)-(2018/09/21(Fri) 07:51:31)
No88689 (WebSurfer さん) に返信
> ■No88685 (しろ さん) に返信
>
> 丸投げしないで、自分でコードを書いて試してみて、期待通りいかなければ
> そのノードをアップして、どこがどう期待と違うのか書いてください。
>
> ところで、「型」というものを意識してコードを書けますか?
>
> option strict on の設定でコードを書いたことがありますか? なければ
> 一度やってみてください。
丸投げしているわけでわないですが色々試してもできないので???
なだけですよ
多分型と言われてもなの事を言っているのかわからないのでどうしたらよいかわかりません。
option strict onって初めて見るのですがどうやって使うものかもわかりません

色々サンプルを見て試しているのですが思ったとうりになりません
// 閏年 (うるう年) かどうか判断する
if (DateTime.IsLeapYear(2008)) {
MessageBox.Show("閏年 (うるう年) です");
}
を参考に
if (label1.Text(10)) {

}
になるかと思い試しましたがエラーが出てしまいます。
引用返信 編集キー/
■88705 / inTopicNo.4)  Re[3]: C# のifについて教えてください
□投稿者/ kiku (50回)-(2018/09/21(Fri) 09:11:09)

C#ですと下記のようになります。

if(label1.Text == "10")
{
}

一度、C#入門で読みながら、試しながら進んでみた方が良いかもしれません。
型の話は5章、演算子の話は8章に記述されています。
頑張ってください。

http://www.atmarkit.co.jp/ait/subtop/features/dotnet/csharp_abc2_index.html


引用返信 編集キー/
■88708 / inTopicNo.5)  Re[3]: C# のifについて教えてください
□投稿者/ 魔界の仮面弁士 (1846回)-(2018/09/21(Fri) 10:18:18)
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 に変換してから比較される仕様になっています。
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ