首页 新闻 搜索 专区 学院

一个bool集合,当一个为true,其他全为false

0
悬赏园豆:20 [已关闭问题] 关闭于 2012-05-04 08:50

定义一个集合

List<bool> bo = new List<bool>();
bool bo1, bo2, bo3, bo4, bo5, bo6, bo7, bo8, bo9, bo10;

然后把定义的10个bool类型放到集合里

bo.Add(bo1);
bo.Add(bo2);
bo.Add(bo3);
bo.Add(bo4);
bo.Add(bo5);
bo.Add(bo6);
bo.Add(bo7);
bo.Add(bo8);
bo.Add(bo9);
bo.Add(bo10);

for (int i = 0; i < bo.Count; i++)
{
if (bo[i])
{

//我要实现当其中有一个为true的时候,其他全为false,这里怎么写?

break;
}
}

路晚歌的主页 路晚歌 | 初学一级 | 园豆:3
提问于:2012-04-28 09:24
< >
分享
所有回答(5)
2
if (bo[i])
{
    for(int j=i+1;j<bo.Count;j++)
    {
        bo[j]=false;
    }
    break;
}
sinhbv | 园豆:2579 (老鸟四级) | 2012-04-28 09:33
0

sinhbv的答案能解决你的问题,但是,这样其实不是很好。如果你真的有这个需求,应该自定义一个类,让这个类派生自Collection<>,重载其中的InsertItem方法和SetItem方法,当有值插入或修改的时候,判断这个值是否为true,如果为true,则检测旧的true值索引,并将之设置为false,同时把这个新设置为true值的数据索引进行保存。

public class MyList : System.Collections.ObjectModel.Collection<bool>
{
    private int _trueIndex = -1;
    protected override void ClearItems()
    {
        base.ClearItems();
        this._trueIndex = -1;
    }

    protected override void InsertItem(int index, bool item)
    {
        if (item)
        {
            if (_trueIndex >= 0)
            {
                this[_trueIndex] = false;
            }
            _trueIndex = index;
        }
        base.InsertItem(index, item);
    }

    protected override void SetItem(int index, bool item)
    {
        if (item)
        {
            if (_trueIndex >= 0)
            {
                this[_trueIndex] = false;
            }
            _trueIndex = index;
        }
        base.SetItem(index, item);
    }

    protected override void RemoveItem(int index)
    {
        if (this[index])
        {
            _trueIndex = -1;
        }
        base.RemoveItem(index);
    }
}
无之无 | 园豆:5095 (大侠五级) | 2012-04-28 09:39
0

其實,都不需要判斷。

   for(int j=0;j<bo.Count;j++)
    {
        bo[i]
=false;
    }
b[j]=true;

無限遐想 | 园豆:3740 (老鸟四级) | 2012-04-28 10:59
0

法一:将所有的bool值指定为false,然后再设置其中需要的那一个为true就可以了(建议)

法二:按你上面的循环方法也可以实现,不过要写两个循环,第一个循环判断bo[i]是否为true,是则break,将它的值保存到一个变量中;然后再第二个循环中,判断bo[i]的是否等于你变量中的值,否则赋值为flase;

不太明确你的这个功能用在什么地方,具体的根据你的情况写吧

KivenRo | 园豆:1722 (小虾三级) | 2012-04-28 11:18
0

楼主还是把最原始的问题贴出来吧,不要在原问题的基础上加上自己的部分解决方案,然后问了这么个奇怪的问题。。。

水牛刀刀 | 园豆:6350 (大侠五级) | 2012-04-28 12:12

我要实现的功能实际上就是控制一组按钮而已,点击一个按钮,那个按钮的位置就向上移动一点,点击第二个按钮,前一个点的按钮就回到原来的位置,第二个按钮向上移动一点,因为同时只有一个按钮浮动,所以我才想用这个方法来控制,当一个按钮为true的时候就向上浮动

支持(0) 反对(0) 路晚歌 | 园豆:3 (初学一级) | 2012-04-28 12:29

@路晚歌: winform还是webform还是mvc还是wpf还是silverlight

支持(0) 反对(0) 水牛刀刀 | 园豆:6350 (大侠五级) | 2012-04-28 13:00

@水牛刀刀: WPF,跟这个藐视没关系吧,这个在哪里逻辑都一样吧

支持(0) 反对(0) 路晚歌 | 园豆:3 (初学一级) | 2012-04-28 13:01

@路晚歌: 那你应该在按钮的click事件里,先把所有的按钮都归位,然后把当前点击的按钮上移一点。跟这么多true false有什么关系。。。

支持(0) 反对(0) 水牛刀刀 | 园豆:6350 (大侠五级) | 2012-04-28 13:12

如果是这样,那不就简单了,就像之前说的方法,第一步:设置所有按钮都为flase;第二步:设置点击的按钮为true不就可以了

支持(0) 反对(0) KivenRo | 园豆:1722 (小虾三级) | 2012-04-28 14:05
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册