循环布尔参数

时间:2011-11-02 18:54:00

标签: vb.net

我有一个通用的问题,看看是否有人可以帮助我找到更好的解决方案。

我有一个.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

显然这段代码不正确,但它显示了我正在尝试做的事情。

有人有什么想法吗?

由于

3 个答案:

答案 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 Stringend function)。

答案 1 :(得分:1)

如果要传递32个或更少的布尔值,则可以使用BitVector32的实例。这允许将它们全部传递给一个整数。它提供了设置和检索值的方法。

答案 2 :(得分:0)

只需创建一个布尔值数组并通过它进行for...each循环。或者,如果你需要选择性的二维阵列。