如何在c#中测试多个布尔值是否具有相同的值?

My *_* Me 9 c# coding-style

是否有更短的测试方法:

if (!((a == b) && (a == c) && (a == d) && (a == e) && (a == f)))
Run Code Online (Sandbox Code Playgroud)

我最后写了一个让我这样做的方法

if (!AllEqual(new[] { a, b, c, d, e, f }))
Run Code Online (Sandbox Code Playgroud)

这感觉更好,并且更具可读性,但我想知道框架中是否有某些东西可以做到这一点?

Jon*_*eet 13

嗯,首先,您可以使用参数数组使其更简单:

public static bool AllEqual<T>(params T[] values)
...


if (AllEqual(a, b, c, d, e, f))
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

老实说,我认为你不会发现任何比这更简单的东西.我没有在其他地方或框架中看到这个.好吧,我想你可以在LINQ做件事:

if (new { a, b, c, d, e, f }.Distinct().Count() == 1)
Run Code Online (Sandbox Code Playgroud)

但那太可怕了:)

稍微更高效的版本是:

if (!(new { a, b, c, d, e, f }).Distinct().Skip(1).Any()))
Run Code Online (Sandbox Code Playgroud)

...一旦找到第二个不同的元素,它将返回false.只有6个元素我不认为值得担心:)