在我目前的应用程序中,我有6个玩家,每个人都有1个布尔变量。在某些情况下设置为true(原来它们是假的)..问题是我想检查哪5个变量设置为true,哪个设置为false但是我不能提出任何好主意。 。只有一些if语句检查每一个组合
#N/A
然而,这是有史以来最丑陋且编写得不好的代码。这样做的一般方法是什么?
答案 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();
因此有两个要点:
答案 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;
}
}