データベースが返す値に従って列挙値を設定するときに、C# Service クラスにインライン IF ステートメントを記述するにはどうすればよいですか?
例: 返されたデータベース値が 1 の場合、enum 値を VariablePeriods に設定します。2 の場合、FixedPeriods に設定します。
お役に立てれば幸いです。
データベースが返す値に従って列挙値を設定するときに、C# Service クラスにインライン IF ステートメントを記述するにはどうすればよいですか?
例: 返されたデータベース値が 1 の場合、enum 値を VariablePeriods に設定します。2 の場合、FixedPeriods に設定します。
お役に立てれば幸いです。
文字通りの答えは次のとおりです。
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 が提案したように、マッピングに値を使用できます。このようにして、不要な分岐を防ぐことができるため、コードが読みやすく拡張しやすくなります。
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;
でインラインifを実行できます
return y == 20 ? 1 : 2;
true の場合は 1、false の場合は 2 になります。
これはあなたが必要とするものです:三項演算子、これを見てください
http://msdn.microsoft.com/en-us/library/ty67wk28%28v=vs.80%29.aspx
列挙型から整数へ:(int)Enum.FixedPeriods
列挙型への整数:(Enum)myInt