51

根据数据库返回的内容设置枚举值时,如何在 C# 服务类中编写内联 IF 语句?

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

希望你能帮忙。

4

5 回答 5

92

字面上的答案是:

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

请注意,内联 if 语句,就像 if 语句一样,只检查真假。如果 (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喜欢的,并在需要的地方 使用cast

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

你可以做内联ifs

return y == 20 ? 1 : 2;

如果为真,则为 1,如果为假,则为 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:(int)Enum.FixedPeriods

整数到枚举:(Enum)myInt

于 2012-08-16T07:05:33.030 回答