定义一个集合
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;
}
}
if (bo[i]) { for(int j=i+1;j<bo.Count;j++) { bo[j]=false; } break; }
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); } }
其實,都不需要判斷。
for(int j=0;j<bo.Count;j++)
{
bo[i]=false;
}
b[j]=true;
法一:将所有的bool值指定为false,然后再设置其中需要的那一个为true就可以了(建议)
法二:按你上面的循环方法也可以实现,不过要写两个循环,第一个循环判断bo[i]是否为true,是则break,将它的值保存到一个变量中;然后再第二个循环中,判断bo[i]的是否等于你变量中的值,否则赋值为flase;
不太明确你的这个功能用在什么地方,具体的根据你的情况写吧
楼主还是把最原始的问题贴出来吧,不要在原问题的基础上加上自己的部分解决方案,然后问了这么个奇怪的问题。。。
我要实现的功能实际上就是控制一组按钮而已,点击一个按钮,那个按钮的位置就向上移动一点,点击第二个按钮,前一个点的按钮就回到原来的位置,第二个按钮向上移动一点,因为同时只有一个按钮浮动,所以我才想用这个方法来控制,当一个按钮为true的时候就向上浮动
@路晚歌: winform还是webform还是mvc还是wpf还是silverlight
@水牛刀刀: WPF,跟这个藐视没关系吧,这个在哪里逻辑都一样吧
@路晚歌: 那你应该在按钮的click事件里,先把所有的按钮都归位,然后把当前点击的按钮上移一点。跟这么多true false有什么关系。。。
如果是这样,那不就简单了,就像之前说的方法,第一步:设置所有按钮都为flase;第二步:设置点击的按钮为true不就可以了