2012-08-16 7 views
30

データベースが返す値に基づいて列挙値を設定するときに、C#サービスクラスにインラインIF文を書く方法を教えてください。C#のインラインIF文

例:返されるデータベース値が1の場合、2、次に固定小数点のときは、enum値をVariablePeriodsに設定します。

希望すると助かります。

答えて

56

がリテラルの答えは次のとおりです。

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

注インラインif文という、ちょうどif文のように、唯一の真か偽かどうかをチェックします。読めないとAになります場合は、より多くの値インラインを追加する場合

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

:(値== 1)偽と評価された場合、それは必ずしもそのため、それがこのようなより安全になり、その値== 2を意味しない場合がありますスイッチが好ましいであろう。

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

列挙型の良いところは、彼らが価値を持っているということなので、user854301が示唆したように、あなたが、マッピングの値を使用することができます。こうすることで、不要なブランチを防ぐことができ、コードをより読みやすく拡張することができます。

+0

@Ysterhak:喜んで助けました。私はまだあなたが提案したようにキャストを使うことよりも分岐を好む理由は疑問だと思います。user854301 – chiccodoro

4

あなたは、偽の場合は、あなたに1 trueの場合と2を与える

return y == 20 ? 1 : 2; 

でインラインIFSを行うことができます。

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; 
+0

をご覧ください。 – chiccodoro

+0

これは既にエンティティクラスにあります。私のサービスクラスのDBから返されるものに応じてEnumを設定する必要があります。そのため、私はインラインIFステートメントを行う必要がありますか? – Landi

+0

いいえ、必要なプロパティを設定するだけでいいです。 – user854301

0

列挙型はintに:(int)Enum.FixedPeriods

のInt列挙へ:(Enum)myInt