检查字符串数组是否包含没有循环的非空字符串

时间:2013-09-10 11:55:48

标签: arrays vb.net string

我有一个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实际上是{{1}}评估为试图转换为Long的东西。

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

我认为应该有一些方法可以测试除了循环以外的其他方法,因为如果没有内容,只需要测试相对较多的工作。

由于

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

1 个答案:

答案 0 :(得分:4)

LINQ的Enumerable.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.EmptyTrue进行比较也会产生Nothing