2012-08-16 53 views
30

根据数据库返回了哪些设置我的枚举值时,如何将我写的内联IF语句在我的C#类服务?在线IF语句在C#

例如:当返回的数据库值是1,则枚举值设置为VariablePeriods,则当2 FixedPeriods。

希望能对你有所帮助。

回答

56

字面上的答案是:

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

注意,内联if语句,就像if语句,只为检查true或false。如果(价值== 1)评估为假,它可能并不一定意味着价值== 2,因此,会是这样更安全:

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

如果你添加更多的价值内嵌如果将变得不可读和开关将是首选:

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

约枚举的好处是,他们有一个值,这样你就可以使用的值的映射,如user854301建议。这样可以防止不必要的分支,从而使代码更具可读性和可扩展性。

+0

@Ysterhak:很高兴帮助。我仍然想知道为什么你更喜欢使用按照user854301 – chiccodoro 2012-08-16 08:29:26

4

你可以做内联IFS与

return y == 20 ? 1 : 2; 

如有虚假,这将给你1,如果真和2。

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 2012-08-16 07:02:48

+0

已经在我的实体类中有这个。需要根据服务类中从数据库返回的内容设置Enum。这就是为什么我需要做一个内联IF声明? – Landi 2012-08-16 07:06:41

+0

都能跟得上你可以简单地设置您需要的属性 – user854301 2012-08-16 07:09:21

0

枚举为int:(int)Enum.FixedPeriods

诠释,以枚举:(Enum)myInt