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

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

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

Re[2]: case文に直したい。


(過去ログ 102 を表示中)

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

■61225 / inTopicNo.1)  case文に直したい。
  
□投稿者/ cale (1回)-(2011/08/06(Sat) 10:41:10)

分類:[.NET 全般] 

開発環境
OS: Windows7 SP1
言語: VisualStudio2008 VB


    Private Sub sample(ByVal Test As Boolean)

        If Test = True Then
        ' ON
         If x = True Then
                ' ONの場合

                If MessageStatus = False Then
                    ' 何も表示されてない場合メッセージ表示
                Else
                    If MessageStatus = True Then
                        ' 表示ある場合メッセージ継続
                    Else
                        ' メッセージ表示
                    End If
                End If
            Else
                ' OFFの場合、メッセージ表示
            End If
        Else
            ' OFF

            If MessageStatus = True Then
                ' ONの場合、メッセージ表示
            Else
                ' メッセージ無し
            End If
        End If
    End Sub

この文をcase文で表現したいのですが、どのように書けばよいのでしょう?
よろしくお願いいたします。

引用返信 編集キー/
■61229 / inTopicNo.2)  Re[1]: case文に直したい。
□投稿者/ ジーザス (1回)-(2011/08/06(Sat) 11:54:37)
どの部分をCaseにしたいのでしょうか?
If文に書く変数がブール型なら、If文だけで十分なのでは?
引用返信 編集キー/
■61231 / inTopicNo.3)  Re[2]: case文に直したい。
□投稿者/ cale (3回)-(2011/08/06(Sat) 12:01:21)
No61229 (ジーザス さん) に返信
> どの部分をCaseにしたいのでしょうか?
> If文に書く変数がブール型なら、If文だけで十分なのでは?

TestをcaseのOn,Offで分けて。
他ももう少しすっきりした書き方にしたいです。

ただ、Ifで書かれたのを、このまま使いたくなく、Caseなどに
ちょっと変えたかっただけなんです。

訂正
Else後のIf、MessageStatus→Testです。
引用返信 編集キー/
■61232 / inTopicNo.4)  Re[1]: case文に直したい。
□投稿者/ επιστημη (2663回)-(2011/08/06(Sat) 12:24:41)
επιστημη さんの Web サイト
あなたが求めているのはこんなもの?

'ビットフィールドの定義
<FlagsAttribute()> _
Enum Flags As Short
  Test = 1
  x = 2
  MessageStatus = 4
End Enum


Module Module1

  Sub Main()
    Dim Test As Boolean
    Dim x As Boolean
    Dim MessageStatus As Boolean

    Test = True
    x = True
    MessageStatus = False

    ' 上記3つの条件からビットフィールドを作る
    Dim f As Flags
    If Test Then f = f Or Flags.Test
    If x Then f = f Or Flags.x
    If MessageStatus Then f = f Or Flags.MessageStatus

    ' Select-Case で処理を振り分ける
    Select Case f
    Case (Flags.Test Or Flags.MessageStatus)
      Console.WriteLine("Test と MessageStatus が true だね")
    Case (Flags.Test Or Flags.x)
      Console.WriteLine("Test と x が true だね")
    '.... などなど、好きなこと書くヨロシ
    Case Else
      Console.WriteLine("どれも false だよ")
    End Select
  End Sub

End Module

引用返信 編集キー/
■61234 / inTopicNo.5)  Re[2]: case文に直したい。
□投稿者/ cale (4回)-(2011/08/06(Sat) 12:50:43)
No61232 (επιστημη さん) に返信
> あなたが求めているのはこんなもの?
>
> 'ビットフィールドの定義
> <FlagsAttribute()> _
> Enum Flags As Short
> Test = 1
> x = 2
> MessageStatus = 4
> End Enum
>
>
> Module Module1
>
> Sub Main()
> Dim Test As Boolean
> Dim x As Boolean
> Dim MessageStatus As Boolean
>
> Test = True
> x = True
> MessageStatus = False
>
> ' 上記3つの条件からビットフィールドを作る
> Dim f As Flags
> If Test Then f = f Or Flags.Test
> If x Then f = f Or Flags.x
> If MessageStatus Then f = f Or Flags.MessageStatus
>
> ' Select-Case で処理を振り分ける
> Select Case f
> Case (Flags.Test Or Flags.MessageStatus)
> Console.WriteLine("Test と MessageStatus が true だね")
> Case (Flags.Test Or Flags.x)
> Console.WriteLine("Test と x が true だね")
> '.... などなど、好きなこと書くヨロシ
> Case Else
> Console.WriteLine("どれも false だよ")
> End Select
> End Sub
>
> End Module
>

う〜ん、違いますね。
メッセージ表示は別でつくってあるので、単純にIfだけの分岐がCase等を織りまぜ、
元のコードより、ちょっと変わったかな?程度でよろしいのですが。
引用返信 編集キー/
■61235 / inTopicNo.6)  Re[3]: case文に直したい。
□投稿者/ επιστημη (2665回)-(2011/08/06(Sat) 13:41:44)
επιστημη さんの Web サイト
> 元のコードより、ちょっと変わったかな?程度でよろしいのですが。

霊能者じゃあるまいし、そんなサジ加減わかるわけないって^^;

引用返信 編集キー/
■61236 / inTopicNo.7)  Re[4]: case文に直したい。
□投稿者/ cale (5回)-(2011/08/06(Sat) 13:54:32)
No61235 (επιστημη さん) に返信
>>元のコードより、ちょっと変わったかな?程度でよろしいのですが。
> 
> 霊能者じゃあるまいし、そんなサジ加減わかるわけないって^^;
> 
申し訳ありません、やはりそうですよね。
自分でも無茶な質問だと思ったので。

Case Test = True ' ONの場合
     If〜
Case Test = False ' OFFの場合
     If〜

このような文で簡単なCaseが書ければと思ったのですが。

引用返信 編集キー/
■61237 / inTopicNo.8)  Re[5]: case文に直したい。
□投稿者/ shu (917回)-(2011/08/06(Sat) 15:14:57)
No61236 (cale さん) に返信

> Case Test = True ' ONの場合
> If〜
> Case Test = False ' OFFの場合
> If〜
>
> このような文で簡単なCaseが書ければと思ったのですが。

Select Case True
Case Test
Case Not Test

でどう?

引用返信 編集キー/
■61240 / inTopicNo.9)  Re[6]: case文に直したい。
□投稿者/ shu (918回)-(2011/08/06(Sat) 19:52:57)
Select Case True
    Case Test AndAlso x AndAlso MessageStatus 

    Case Test AndAlso x AndAlso Not MessageStatus 

    Case Test AndAlso Not x

    Case Not Test AndAlso MessageStatus 

    Case Not Test AndAlso Not MessageStatus 

End Select

もう少し詳細に書くとこんな感じ?

引用返信 編集キー/
■61242 / inTopicNo.10)  Re[3]: case文に直したい。
□投稿者/ ジーザス (2回)-(2011/08/07(Sun) 00:18:16)
No61234 (cale さん) に返信

> メッセージ表示は別でつくってあるので、単純にIfだけの分岐がCase等を織りまぜ、
> 元のコードより、ちょっと変わったかな?程度でよろしいのですが。

はぁ?
ブール型変数を使っているのに、この場合でCase文を使うメリットって何?
単なる他人のコードの流用で分岐を変えたいというだけなの?
(コードの可読性が目的ではなさそうだ)
引用返信 編集キー/


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

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -