繁体   English   中英

是否可以指定一个与 LINQ 内联的数组?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM