0

コードを VB.net から C# に変換しています。C# が初めてなので、 DecimalsのSwitch()ステートメントに行き詰まりました。switch ステートメントで 10 進数値を使用できないことがわかりました。

VB の switch ステートメントは次のようになります。

changeAmt は 10 進数です

Case changeAmt を選択

Case Is > 0
             expressions
Case Is < 0
             expressions

これをC#に変換するにはどうすればよいですか?

if-else ステートメントを使用する必要がありますか。コードの記述と理解がはるかに簡単になるため、switch を使用したい

4

8 に答える 8

4

ifこれにはステートメントを使用する必要があります。値を別の型にキャストできますが、case.

そう:

if (changeAmt > 0) {
  ...
} else if (changeAmt < 0) {
  ...
}
于 2012-07-12T17:33:03.153 に答える
2

まだできることは、単一レベルの間接化です。表現したいことをより明確にし、構造を好きなように残します。そして、この変換は、小数点スイッチを使用したい場所ならどこでも使用できます。わかりやすいですね。

私が伝えたいことを示す簡単なコードを次に示します。

    public enum EnumChangeAmt
    {
        Undetermined,
        Negative,
        Positive,
        ExactlyNull,
    }

    public class EnumSwitchSample
    {
        public void EnumSwitch()
        {
            var changeAmt = 0;

            var changeAmtType = GetChangeAmt(changeAmt);

            switch (changeAmtType)
            {
                case EnumChangeAmt.Negative:
                {
                    break;
                }
                case EnumChangeAmt.Positive:
                {
                    break;
                }
                case EnumChangeAmt.ExactlyNull:
                {
                    break;
                }
                case EnumChangeAmt.Undetermined:
                default:
                {
                    // do something about it
                    break;
                }
            }
        }

        public EnumChangeAmt GetChangeAmt(int changeAmt)
        {
            if (changeAmt < 0)
            {
                return EnumChangeAmt.Negative;
            }

            if (changeAmt > 0)
            {
                return EnumChangeAmt.Positive;
            }

            if (changeAmt == 0)
            {
                return EnumChangeAmt.ExactlyNull;
            }

            return EnumChangeAmt.Undetermined;
        }
    }

Andre Calil が述べたように、列挙型はここで非常に便利です!

于 2012-07-12T17:50:53.203 に答える
1

を使用する必要がありますif-else。C# では、switch ステートメントは定数値の場合のみです。

于 2012-07-12T17:32:28.490 に答える
1

VB.Netのステートメントは、C#Select Caseのステートメントよりもはるかに広い範囲の式をサポートしています。switchAC#switchは基本的に数値定数と文字列定数に限定されていますが、Select Case任意の式をサポートできます。Select CaseC# の範囲に収まらない を移植する場合は、ステートメントswitchを使用する必要がありますif / else

if (changeAmt > 0) { 
  // expressions 
} else if (changeAmt < 0) {
  // expressions
}
于 2012-07-12T17:32:41.870 に答える
1

C# では特定の値にのみ切り替えることができるため、特定のケースでは、if else if を使用する必要があります。

if(changeAmt < 0){
} else if (changeAmt > 0)
{
} else 
{
}
于 2012-07-12T17:33:23.587 に答える
0

switch ステートメントは整数型のみをサポートします (列挙型はリストされていませんが、整数型によってサポートされているため、switch ステートメントで使用できます) (Changeling によって指摘されているように、文字列もサポートされています - 参照についてはコメントを参照してください) および定数値との等値比較. したがって、いくつかの if ステートメントを使用する必要があります。

それ以外なら使えますか?

場合 (> 0)

             expressions

それ以外の場合 (< 0)

             expressions

C#でスイッチで10進数の範囲を使用することは不可能ですか?

于 2012-07-12T17:32:53.913 に答える
0

最も読みやすい解決策は、if-else ブロックを使用することです。

if (changeAmt > 0)
{
    // blablabla
}
else if (changeAmt < 0)
{
    // blablabla
}

なぜVBでスイッチケースだったのかわからないので、不要のようです。

于 2012-07-12T17:33:05.150 に答える
0

andステートメントdecimalsを使用できます。ifif-else

お気に入り

if(condition)
{

}
else if(condition)
{

}
于 2012-07-12T17:33:14.010 に答える