51

データベースが返す値に従って列挙値を設定するときに、C# Service クラスにインライン IF ステートメントを記述するにはどうすればよいですか?

例: 返されたデータベース値が 1 の場合、enum 値を VariablePeriods に設定します。2 の場合、FixedPeriods に設定します。

お役に立てれば幸いです。

4

5 に答える 5

92

文字通りの答えは次のとおりです。

return (value == 1 ? Periods.VariablePeriods : Periods.FixedPeriods);

インライン if ステートメントは、if ステートメントと同様に、true または false のみをチェックすることに注意してください。(value == 1) が false と評価された場合、必ずしも value == 2 であるとは限りません。したがって、次のようにする方が安全です。

return (value == 1
    ? Periods.VariablePeriods
    : (value == 2
        ? Periods.FixedPeriods
        : Periods.Unknown));

さらに値を追加すると、インラインの if が読み取れなくなり、スイッチが優先されます。

switch (value)
{
case 1:
    return Periods.VariablePeriods;
case 2:
    return Periods.FixedPeriods;
}

列挙型の良いところは、値があることです。そのため、user854301 が提案したように、マッピングに値を使用できます。このようにして、不要な分岐を防ぐことができるため、コードが読みやすく拡張しやすくなります。

于 2012-08-16T07:08:04.073 に答える
12

enum好きなように定義し、必要に応じ てキャストを使用できます

public enum MyEnum
{
    VariablePeriods = 1,
    FixedPeriods = 2
}

使用法

public class Entity
{
    public MyEnum Property { get; set; }
}

var returnedFromDB = 1;
var entity = new Entity();
entity.Property = (MyEnum)returnedFromDB;
于 2012-08-16T07:01:59.713 に答える
8

でインラインifを実行できます

return y == 20 ? 1 : 2;

true の場合は 1、false の場合は 2 になります。

于 2012-08-16T07:01:07.113 に答える
1

これはあなたが必要とするものです:三項演算子、これを見てください

http://msdn.microsoft.com/en-us/library/ty67wk28%28v=vs.80%29.aspx

http://www.dotnetperls.com/ternary

于 2012-08-16T07:08:11.640 に答える
0

列挙型から整数へ:(int)Enum.FixedPeriods

列挙型への整数:(Enum)myInt

于 2012-08-16T07:05:33.030 に答える