此函数需要检查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");
}
答案 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");
}
答案 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