添加布尔值(作为整数)

时间:2012-09-07 11:19:27

标签: c# boolean

我在AS3中编写了一个代码,它允许我检查特定数量的事情是否属实......

If (true + false + true + true + false + true + true < 4)
{

}

当我尝试用C#重写时,它告诉我我不能添加类型bool和bool。最好的方法是这样重写它吗?或者是否有一些更简单的工作?

If ((true?1:0) + (false?1:0) + (true?1:0) + (true?1:0) + (false?1:0) + (true?1:0) + (true?1:0) < 4)
{

}

6 个答案:

答案 0 :(得分:56)

尝试使用System.Linq中的IEnumerable<T>.Count(Func<T,bool>)T作为bool,{strong> params方法参数。

public static int CountTrue(params bool[] args)
{
   return args.Count(t => t);
}

用法

// The count will be 3
int count = CountTrue(false, true, false, true, true);

您还可以引入 this扩展方法

public static int TrueCount(this bool[] array)
{
   return array.Count(t => t);
}

用法

// The count will be 3
int count = new bool[] { false, true, false, true, true }.TrueCount();

答案 1 :(得分:15)

您可以创建一个数组并使用Count

if ((new []{true, false, true, true, false, true, true}).Count(x=>x) < 4)
{

}

Sum方法:

if ((new []{true, false, true, true, false, true, true}).Sum(x=>x?1:0) < 4)
{

}

答案 2 :(得分:12)

这是一个更有趣的例子:

if ((BoolCount)true + false + true + true + false + true + true <= 5)
{
    Console.WriteLine("yay");
}

使用此课程:

struct BoolCount
{
    private readonly int c;
    private BoolCount(int c) { this.c = c; }

    public static implicit operator BoolCount(bool b)
        { return new BoolCount(Convert.ToInt32(b)); }

    public static implicit operator int(BoolCount me)
        { return me.c; }

    public static BoolCount operator +(BoolCount me, BoolCount other)
        { return new BoolCount(me.c + other.c); }
}

答案 3 :(得分:2)

Convert.ToInt32(true) + Convert.ToInt32(false) + Convert.ToInt32(true)也适用于这种情况我认为这是我们最简单的方法

答案 4 :(得分:0)

(灵感来自 L.B.:s 评论)你可以写一个扩展方法:

static class Ex
{
    public static int Int(this bool x) { return x ? 1 : 0; }
}

然后(假设您在包含using类的命名空间中包含Ex),您可以像这样编写if语句:

if (true.Int() + false.Int() + true.Int() + true.Int() + 
    false.Int() + true.Int() + true.Int() < 4)
{
    ...
}

答案 5 :(得分:0)

您可以为BitArray类编写扩展方法。我不确定性能是否比使用Linq更好,但至少它是另一种选择:

public static int CountSetBits(this BitArray theBitArray)
{
   int count = 0;
   for (int i = 0; i < theBitArray.Count; i++)
   {
      count += (theBitArray.Get(i)) ? 1 : 0;
   }
   return count; 
}

用法:

BitArray barray = new BitArray(new [] { true, true, false, true });
int count = barray.CountSetBits(); // Will return 3