我正在使用从用户Mathieu Guindon收获的功能,该功能允许快速检查单元格中是否包含任何字符串集,而不必使用[Authorize(Roles = "admin")]
public class CmsControllerBase : Controller
{
}
等。该部分的效果很好,但是我现在需要对其进行修改,以创建另一个函数,该函数检查单元格中是否也没有包含任何字符串集,并且我无法获取它来返回所需的结果。
我放入了一系列虚拟变量,以检查代码是否按预期工作,似乎问题是当我要求新函数(InStr() Or InStr() Or
)搜索多个字符串时-再次, DoesNotContainAny
功能运行完美。
ContainsAny
在此先感谢您可以传授的智慧或见识!
ColF ColG Returned Correct
H54 H54 False False
H54 True True
L20, H54 H54 False False
B18 B18 False False
B18 True True
L20, B18 B18 True False <-- issue
答案 0 :(得分:0)
DoesNotContainAny
是一个令人困惑的名称。可能尚不清楚立即确定的内容:一个字符串只有一些选项,但不是全部,或者一个字符串完全没有任何选项。
以negative sense命名的函数就是这样。
使用积极意义,对于前一种情况,您可以调用该函数LacksSome()
,对于后一种情况,您可以调用ContainsNone()
。
然后,您会注意到LacksSome()
仍然是负名称,并且您将设计一个相反的函数ContainsAll()
,该函数最终被完全肯定地命名,并且您将其称为Not ContainsAll()
表示“至少缺少一个”。
要实施ContainsAll()
,您会注意到,您可以通过更改一行并添加另一行来轻松地从现有ContainsAny()
中获取它:
' Former ContainsAny
Public Function ContainsAll(ByVal data As String, ByVal caseSensitive As Boolean, ParamArray searchterms() As Variant) As Boolean
Dim k As Integer
Dim found As Boolean
found = True ' Added
For k = LBound(searchterms) To UBound(searchterms)
found = Contains(data, CStr(searchterms(k)), caseSensitive)
If Not found Then Exit For ' Changed
Next
ContainsAny = found
End Function
关于实现ContainsNone()
的过程,您会注意到“不包含”表示“不包含任何”,并且您已经拥有ContainsAny()
,因此您可以调用{ {1}}。