所以我有一个枚举系统,我需要在下拉列表中按麻醉,非麻醉,精神病和非精神病进行过滤。我的想法是将值放在字典中,并将它们的viewbag放入前端的选择列表中,但是我在配置字典以注册“ [var]的缺席”时遇到困难
如果我的字典的结构如下:
private readonly Dictionary<int, string> _medicationDetails = new Dictionary<int, string>
{
{(int)PersonMedicationDescription.MedicationTags.NarcoticDrug, "Narcotic"},
{(int)PersonMedicationDescription.MedicationTags.PsychotropicDrug, "Psychotropic"}
};
我希望能够做到:
{(int)!PersonMedicationDescription.MedicationTags.NarcoticDrug, "non-Narcotic"},
或类似的内容。我在这里想念什么?有没有更好的方法可以做到这一点?
编辑:
是正确的选择。如果只是一个布尔值,我知道该怎么做,但是如何同时填充两个列表?要让一个人上班,我认为这会起作用:
ViewBag.IsNarcoticOptions = new[]
{
true,
false
}.ToSelectList(b => b.ToString(), b => b.ToString("Narcotic", "Non Narcotic"));
var isNarcotic = filters.IsNarcotic;
if (isNarcotic.HasValue)
{
query = isNarcotic.Value
? query.Where(rdq => (rdq.MedicationFlags & (int)PersonMedicationDescription.MedicationTags.NarcoticDrug) == (int)PersonMedicationDescription.MedicationTags.NarcoticDrug)
: query.Where(rdq => (rdq.MedicationFlags & (int)PersonMedicationDescription.MedicationTags.NarcoticDrug) == 0);
}
但是对于另一组正确/错误该怎么做呢?
答案 0 :(得分:0)
您似乎正在处理 flags :毒品是Narcotic
还是不是Psychotropic
?标记可以组合:
我们很可能拥有Narcotic
和 Psychotropic
(LSD
?)或Psychotropic
或Narcotic
(阿司匹林)都没有。如果您有几个标志(少于64个),则可以尝试将枚举设计为Flags
并摆脱字典
[Flags]
public enum MedicationTags {
None = 0,
Narcotic = 1,
Psychotropic = 1 << 1,
// SomeOtherKind = 1 << n // where n = 2, 3, 4 etc.
}
然后让我们为枚举实现扩展方法 Description
:
public static class MedicationTagsExtensions {
public static String Description(this MedicationTags value) {
return string.Join(", ",
(value.HasFlag(MedicationTags.Narcotic) ? "" : "non-") + "Narcotic",
(value.HasFlag(MedicationTags.Psychotropic) ? "" : "non-") + "Psychotropic"
);
}
}
所以,当有毒品时:
// Morphine is narcotic only
MedicationTags morphine = MedicationTags.Narcotic;
// LSD is both narcotic and psychotropic
MedicationTags lsd = MedicationTags.Narcotic | MedicationTags.Psychotropic;
// Good old aspirin is neither narcotic nor psychotropic
MedicationTags aspirin = MedicationTags.None;
您可以轻松获得说明
Console.WriteLine(aspirin.Description());
结果:
non-Narcotic, non-Psychotropic