检查多个bool变量是否具有特定值

时间:2015-12-13 19:14:35

标签: c# boolean

在我目前的应用程序中,我有6个玩家,每个人都有1个布尔变量。在某些情况下设置为true(原来它们是假的)..问题是我想检查哪5个变量设置为true,哪个设置为false但是我不能提出任何好主意。 。只有一些if语句检查每一个组合

#N/A

然而,这是有史以来最丑陋且编写得不好的代码。这样做的一般方法是什么?

4 个答案:

答案 0 :(得分:4)

如果只是布尔人,你将很难做到这一点。但是如果你将boolean包装在一个包含其他数据的类中,它就会变得更容易。

class Item
{
    public bool   IsCondition {get; set;}
    public string Name        {get; set;}
}

var itemsToCheck = new List<Item>()
{
    new Item { IsCondition = true;  Name = "A",
    new Item { IsCondition = true;  Name = "B",
    new Item { IsCondition = false; Name = "C",
    new Item { IsCondition = true;  Name = "D",
}
foreach(var item in itemsToCheck)
{
    if(!Item.IsCondition)
    {
        Console.WriteLine($"Item {item.Name} is false"); 
    }
}

您还可以获取Linq

所有错误列表
var items = itemsToCheck.Where(i => !i.IsCondition);

或者如果你知道只有一个是假的,你可以得到那个单项。

var item = itemsToCheck.Where(i => !i.IsCondition).Single();

因此有两个要点:

  • 您应该在集合中存储类似的数据集,例如List
  • 如果要将某些信息组合在一起,请使用课程。

答案 1 :(得分:2)

您可以为它们分配布尔列表,然后使用它们。

List<bool> bools = new List<bool> {a,b,c,d,e,f};

if (bools.Count(x => x) == 5) // if there are 5 true items
{
    int index = bools.IndexOf(false); // index of false item
    // do your things here.
}

请记住索引是基于0的。表示索引0指的是第一个项目。

答案 2 :(得分:1)

通常,您使用数组/列表并只计算next值:

false

您可以对个别变量使用类似的方法

var onlyOneFromListIsFalse = players.Select(p => !p.SomeProperty).Count() == 1;

答案 3 :(得分:0)

使用LINQ和List / Array将大大减少您的代码。

using System;
using System.Linq;
using System.Collections.Generic;

public class Program
{
    public static void Main()
    {
        var players = new List<Player>
        {
            new Player("Orel", true),
            new Player("Zeus"),
            new Player("Hercules", true),
            new Player("Nepton"),
        };

        var playingPlayers = players.Where(p => p.IsPlaying);
        foreach (var player in playingPlayers)
        {
            Console.WriteLine(player.Name);
        }
    }
}

public class Player
{
    public string Name { get; set; }
    public bool IsPlaying { get; set; }

    public Player(string name, bool isPlaying = false)
    {
        Name = name;
        IsPlaying = isPlaying;
    }
}