c# - 四个可为 null 的 bool 多选复选框。

标签 c#

我没有什么问题。我是一名新开发人员,我对我的产品有“年龄标准”的看法。

这些选项是:“< 24”、“24 - 35”、“35 - 45”、“> 45”。

我需要处理的 json 看起来是这样的:

"age": {
        "lessThan24": true,
        "between24And35": true,
        "between35And45": true,
        "moreThan45": true
        }

我的 View 模型:

public class AgeCriterionViewModel
{
    public bool? LessThan24 { get; set; }
    public bool? Between24And35 { get; set; }
    public bool? Between35And45 { get; set; }
    public bool? MoreThan45 { get; set; }
}

还有我的领域模型:

public class AgeCriterion
{
    public int? From { get; set; }
    public int? To { get; set; }
}

所以这是我的问题。我需要将 View 模型映射到域模型。但是这些 bool 值可以为空,因此它们可以为空、假或真。 OLSO 它可以是多选的。所以这些选项可能是“lessthan24”和“between35and45”或全部或没有。

我正在考虑构建一些可怕的 BIG IF 结构。但是我怎样才能检查所有选项呢?有什么好的方法吗?

我现在有:

       if (age == null)
            return null;
        AgeCriterion criterion = new AgeCriterion();

        if (age.LessThan24.HasValue)
        {
            if (age.LessThan24.Value)
            {
                criterion.From = 0;
                criterion.To = 24;
            }
        }

最佳答案

您可以创建枚举并使用位掩码:

[Flags]
public enum AgeCriterion
{
   NotSpecified = 0,
   BelowTwentyFour = 1,
   TwentyToThirtyFive = 2,
   ThirtyToFourtyFive = 4,
   MoreThanFourtyFive = 8,
}

public class AgeCriterion
{
    public AgeCriterion Age { get; set; }
}

然后像这样将 viewmodel 映射到这个枚举:

  var criterion = new AgeCriterion();

  if (age == null)
        return criterion; // fill free to return null if it better suit your needs

  AgeCriterion age;

  age  = age.LessThan24 == true ? age | AgeCriterion.BelowTwentyFour : age;

  age  = age.Between24And35 == true ? age | AgeCriterion.TwentyToThirtyFive : age;

  age  = age.Between35And45 == true ? age | AgeCriterion.ThirtyToFourtyFive : age;

  age  = age.MoreThan45 == true ? age | AgeCriterion.MoreThanFourtyFive : age;

  criterion.Age = age;

  return criterion;

附言 要检查代码中的特定标准,您可以这样做:


为 24 到 35 岁 45 岁以上的人做点事(我不会说这对我来说很有意义,但仍然)

if(criterion.Age == AgeCriterion.TwentyToThirtyFive &  criterion.Age == AgeCriterion.MoreThanFourtyFive)

为 24 至 35 岁 45 岁以上的人做点事


if(criterion.Age == AgeCriterion.TwentyToThirtyFive |  criterion.Age == AgeCriterion.MoreThanFourtyFive)

关于c# - 四个可为 null 的 bool 多选复选框。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37482269/

相关文章:

c# - 接口(interface)优化代码?

c# - 使用 ORM 时的命令/查询分离

c# - 在 C# 中嵌入 Word 文档

C# - 是否可以使用新接口(interface)扩展现有的内置类

c# - 如何在大型项目中查找重复项?

c# - Return value using String result=Command.ExecuteScalar() result返回null时出现错误

c# - 在新构建后保留 Session[] 变量

c# - 最小起订量错误设置与异步/等待单元测试不匹配

c# - 如何预测内存不足?

c# - 使用资源包在 unity webgl 中加载/卸载巨大的世界