[英]Is it possible to specify an array inline with LINQ?
我正在使用此代码:
var values = new[] { 15, 30, 50 };
if (Settings.Rev == REV.No && values.Any(v => v == Settings.Trk2))
有没有办法可以消除分配给值的需要,而在这种情况下直接执行 Any ? 如果我这样做,任何人都可以看到可能出现的任何问题吗?
还有一种方法可以用左侧的 Settings.Trk2 之类的东西来反转它,让它更清楚一点,我想检查它的值是 15、30 还是 50?
你可以这样写:
if (Settings.Rev == REV.No && (new[] { 15, 30, 50 }).Contains(Settings.Trk2))
当Settings.Rev != REV.No
时,这种方法稍微好Settings.Rev != REV.No
因为在这种情况下甚至不会创建数组。
我建议您将所有值放在HashSet<int>
以快速检查它是否包含指定的值。
var set = new HashSet<int> { 15, 30, 50 };
if (Settings.Rev == REV.No && set.Contains(Settings.Trk2))
...
最好保持HashSet
构造一次,然后超时更新。 这意味着您需要将HashSet
定义为类的字段并使用它。
你可能可以这样做:
if (Settings?.Rev == REV.No && Array.IndexOf(new[] { 15, 30, 50 }, Settings?.Trk2) != -1)
对于数组,我可能会坚持使用数组方法而不是 LINQ。 就个人而言,我更喜欢可读性而不是减少行数。
更新:
if (Array.IndexOf(new[] { 15, 30, 50 }, Settings?.Trk2) != -1)
if (Settings?.Rev == REV.No)
{
// rest of the code.
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.