4

我有一个 If 语句可以检查许多事情(BaySlots() 是一个字符串数组)。

If (Not BaySlots.Contains(Not String.Empty)) OrElse
        (Not BayAcId = 0 AndAlso Not BayAcId = acProgramId _
            AndAlso overrideSetting = False) Then

我虽然Array.Contains第一个条件的方法足以告诉我数组是否只包含空字符串,但它给出了InvalidCastException: Conversion from string "" to type Long is not valid所以我猜Not String.Empty实际上被评估为试图转换为 Long 的东西。

有没有更好的方法可以用来改造这个 If,这样我仍然可以在数组中仅包含空字符串的测试,作为 If 的一部分,而不必添加前面的循环来测试每个索引BaySlots() 用于空字符串?

我认为除了循环之外可能应该有一些测试方法,因为这将是相对大量的工作来测试是否没有内容。

谢谢

PS 只是为了澄清这一点,并不是要测试数组是否具有零维或等于 Nothing,而是它包含的字符串都等于 String.Empty。

4

1 回答 1

4

LINQEnumerable.Any可以做到这一点。您的直接翻译Not Contains(Not String.Empty))是:

If (Not BaySlots.Any(Function(x) x <> "")) OrElse ...

(如果您喜欢,请随意替换""为。)String.Empty


由于您在这里有双重否定,我建议将其替换Enumerable.All为可读性:

If BaySlots.All(Function(x) x = "") OrElse ...

这也更清楚地传达了您的意图(“如果所有条目都是空的......”)。


注意:在VB.NET 中,""如果字符串是.String.EmptyTrueNothing

于 2013-09-10T11:58:35.913 回答