【发布时间】:2018-10-27 10:23:21
【问题描述】:
我有这段代码:
if (filter != RECENT &&
filter != TODAY &&
filter != WEEK &&
filter != MONTH &&
filter != ALLTIME)
{
filter = RECENT;
}
请注意,filter 是 string,它与 const string 类型进行比较。有什么办法可以内联并让它更具可读性吗?使用三元运算符并没有变得更好,因为我仍然需要重复 filter != XXXXX
filter = filter != RECENT &&
filter != TODAY &&
filter != WEEK &&
filter != MONTH &&
filter != ALLTIME ? RECENT : filter;
这显然行不通
filter = filter != RECENT && TODAY && WEEK && MONTH && ALLTIME ? RECENT : filter;
有没有更漂亮的方法(更漂亮==所有逻辑都必须在一行代码中)来做这个比较?更具体地说,是为了防止 filter != XXXXX 重复。
请注意,性能不是我对这个问题的主要关注点。
【问题讨论】:
-
取决于
Filter实际上是什么。它是一个枚举吗?如果是这样,它是具有[Flags]属性的枚举吗? -
@elgonzo
filter只是一个string。它正在与常量进行比较,例如。const string RECENT = "recent";. -
您可以将这些字符串放在一个数组中并使用 Linq。如果您随后进一步创建/使用带有
params string[] ...参数的静态方法(或者更好的扩展方法)(params string[]参数将是我谈到的字符串数组),您可以将测试简化为@ 987654336@ -
创建一个常量数组,然后
!array.Contains(filter)或考虑使用 elgonzo 建议的枚举。我们不了解您的应用程序,但据我们所知,这可能是比比较字符串更好的做法。 -
没错,在这种情况下建议 Linq 可能有点矫枉过正;数组类型提供的函数(例如Contains)可能就是你所需要的...
标签: c# comparison equality conditional-operator readability