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

时间:2019-12-23 05:38:46

标签: c#

我正在使用以下代码:

var values = new[] { 15, 30, 50 };
if (Settings.Rev == REV.No && values.Any(v => v == Settings.Trk2))

有没有一种方法可以消除分配给值的需要,而在这种情况下可以直接执行Any?如果我这样做,谁能看到可能出现的任何问题?

还有一种方法,我可以通过左侧的Settings.Trk2之类的东西来反转它,以使其更清楚我想检查它的值是15、30还是50?

2 个答案:

答案 0 :(得分:3)

您可以这样写:

if (Settings.Rev == REV.No && (new[] { 15, 30, 50 }).Contains(Settings.Trk2))

当使用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定义为类的字段并使用它。

答案 1 :(得分:2)

您可能可以这样做:

Open Text File...

对于数组,我可能会坚持使用数组方法而不是LINQ。 就个人而言,我更喜欢可读性,而不是减少行数。

更新

if (Settings?.Rev == REV.No && Array.IndexOf(new[] { 15, 30, 50 }, Settings?.Trk2) != -1)