我有一个通用的问题,看看是否有人可以帮助我找到更好的解决方案。
我有一个.NET方法,它接受20多个布尔值,单独传递。
对于每个参数为true,我需要向列表中添加一个值。
除了为每个布尔值添加if语句之外,是否有更有效的方法将值添加到列表中?
示例:
Public Function Example(ByVal pblnBool1 as boolean, _
ByVal pblnBool2 as boolean, _
ByVal pblnBool3 as boolean)
If pblnBool1 then
list += "A"
End If
If pblnBool2 then
list += "B"
End If
End Function
显然这段代码不正确,但它显示了我正在尝试做的事情。
有人有什么想法吗?
由于
答案 0 :(得分:2)
首先,有20多个参数很糟糕。
其次,您可以使用ParamArray
关键字声明您希望在数组中传递给您的值。 (我认为这不符合CLS,这意味着如果没有将值绑定到数组中,某些语言将无法调用您的函数。但VB和C#都可以轻松地与彼此的param数组一起工作。)如果你不这样做我想这样做,你总是可以在你的函数中自己创建数组。但我宁愿让语言和/或框架为我做这件事。
这不是优化的或任何东西;这只是一个例子。
sub Example(paramarray bools() as Boolean)
static vals() as String = {"A", "B", "C"}
if bools.Length > vals.Length then
throw new ArgumentException(String.Format( _
"Too many params! ({0} max, {1} passed)", _
vals.Length, bools.Length _
))
end if
for i as Integer = 0 to bools.Length - 1
if bools(i) then list += vals(i)
next
end sub
我假设list
是某个成员变量,因为它没有在您的代码中定义。如果您打算将它作为返回值,则在函数中声明它,并在结尾处返回它。 (当然,将sub Example(...)
和end sub
转为function Example(...) as String
和end function
)。
答案 1 :(得分:1)
如果要传递32个或更少的布尔值,则可以使用BitVector32的实例。这允许将它们全部传递给一个整数。它提供了设置和检索值的方法。
答案 2 :(得分:0)
只需创建一个布尔值数组并通过它进行for...each
循环。或者,如果你需要选择性的二维阵列。