我没有什么问题。我是一名新开发人员,我对我的产品有“年龄标准”的看法。
这些选项是:“< 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/