检查至少一个对象是否不为零

时间:2020-01-23 15:58:38

标签: c#

此函数需要检查a = b = c = 0还是只有一个是<> 0

是否有进行此检查的最佳方法?

void (int p, int a, int s) {
    if ((p != 0 && a != 0) 
        || (p != 0 && s != 0)
        || (a != 0 && s != 0)
        || (a != 0 && s != 0 && p != 0)) throw new Exception("Error please set A or P or S");

}

3 个答案:

答案 0 :(得分:4)

一个简单的解决方案,无需使用Linq或它附带的任何开销:

public void Check(int p, int a, int s)
{
    var count = 0;
    if (p != 0) count++;
    if (a != 0) count++;
    if (s != 0) count++;
    if (count >= 2)
        Console.WriteLine("Please set only A or P or S or none");
    else
        Console.WriteLine("OK");
}

工作小提琴:https://dotnetfiddle.net/ViMmRV

答案 1 :(得分:1)

void Method(int p, int a, int s)
{
    if (new [] { p, a, s }.Count(i => i == 0) <= 1)
    {
        throw new Exception("Error please set A or P or S");
    }
}

答案 2 :(得分:1)

此功能需要检查 a = b = c = 0 还是仅一个<> 0

如果我正确理解:

private void CheckValues(int p, int a, int s)
{
    var values = new[] { p, a, s };

    if (values.Sum() == 0 || values.Count(v => v != 0) == 1)
        Console.WriteLine("Error");
    else
        Console.WriteLine("OK");
}

private void CheckValues(params int[] values)
{
    if (values.Sum() == 0 || values.Count(v => v != 0) == 1)
        Console.WriteLine("Error");
    else
        Console.WriteLine("OK");
}

因此:

CheckValues(0, 0, 0); // <- Error
CheckValues(0, 0, 1); // <- Error
CheckValues(0, 1, 2); // <- OK
CheckValues(1, 2, 3); // <- OK
相关问题