我想检查这些变量是否具有相同的值。
示例:
int a = 5;
int b = 5;
int c = 5;
int d = 5;
int e = 5;
. . .
int k = 5;
if(a==b && b==c && c==d && d==e && .... && j==k)
{
//this is Complex way and not well understandable.
}
比较所有的简单方法都一样吗? 以下示例
if(a==b==c==d==e.....j==k)
{
//Understandable but not work
}
答案 0 :(得分:9)
这样的事情怎么样:
if (Array.TrueForAll<int>(new int[] {a, b, c, d, e, f, g, h, i, j, k },
val => (a == val))) {
// do something
}
答案 1 :(得分:4)
您可以创建一个var args方法来执行此操作:
bool intsEqual (params int[] ints) {
for (int i = 0; i < ints.Length - 1; i++) {
if (ints[i] != ints[i+1]) {
return False;
}
}
return True;
}
然后只需将所有内容作为参数调用它:
if (intsEqual(a, b, c, d, e, f, g, h, i, j, k)) {
doSomeStuff();
}
答案 2 :(得分:4)
有了这么多变量,将它们移动到数组中会有意义吗?
然后,您可以使用Linq表达式(例如myarray.Distinct().Count() == 1;
或myarray.All(r => r == 5);
答案 3 :(得分:2)
只是一个想法,但如果你能计算出整个清单的标准偏差,并且它等于零,你就会有答案。
以下是针对此问题的网站上的答案:Standard deviation of generic list?
有趣的问题。祝你好运。
答案 4 :(得分:2)
我同意最简单的方法是将它们全部放入列表中,然后使用以下内容进行比较。这实际上是循环并与第一个值进行比较,但这有点清晰。
var match = counts.All(x => x == counts[0])
答案 5 :(得分:1)
怎么样
int common = a;
if (a==common && b==common && c==common && d==common && .... && k==common)
答案 6 :(得分:1)
您可以编写一个这样的辅助方法:
public static bool AllEqual<T> (params T[] values) where T : IEquatable<T>
{
if (values.Length < 2) return true;
for (int i = 1; i < values.Length; i++)
if (!values[i].Equals (values[0])) return false;
return true;
}
但在特殊情况下,这与==运算符略有不同:
AllEqual (double.NaN, double.NaN).Dump(); // True
(double.NaN == double.NaN).Dump(); // False
答案 7 :(得分:1)
我知道这是我遇到的一个老问题,但我想知道出了什么问题:
if (a == (b & c & d & e & f & g & h & i & j & k))
{
}
答案 8 :(得分:0)
它不起作用,因为a == b计算为无法与整数c进行比较的布尔值。你所拥有的似乎是最好的方式。
答案 9 :(得分:0)
您可以考虑将值放在数组中并使用for()循环。它实际上并不简单,但如果值的数量发生变化,它可能会有所帮助。
答案 10 :(得分:0)
您可以使用变量参数辅助函数来轻松执行比较。
static bool CompareLongList(params int[] args)
{
if (args.Length > 1)
{
int value = args[0];
for (int i = 1; i < args.Length; ++i)
{
if (value != args[i])
return false;
}
}
return true;
}
然后您只需使用以下功能
if(CompareLongList(a,b,c,d,e,f,j,h,i,j,k))
{
// True Code
}
答案 11 :(得分:0)
比较数组中的相同元素:
same = len(uniq([1,2,3,4])) == 1
答案 12 :(得分:0)
使用 Linq 查询。 var bestInt = new List() { a,b,c,d,e,f}.Max();
答案 13 :(得分:0)
按位和是检查多个变量是否具有相同值的可能方法。 这种辅助方法当然也可以检查相等性,而不是使用“&”运算符。接受 params 变量数组的辅助方法在这里似乎是正确的方法。我们也可以调整此方法以接受泛型参数,但在 C#(和其他语言)中,只有少数数据类型支持布尔逻辑运算符。
使用高 Int32 值进行测试以检查其有效性:
void Main()
{
int a = 1234567891;
int b = 1234567891;
int c = 1234567891;
int d = 1234567891;
int e = 1234567891;
int f = 1234567891;
int g = 1234567891;
int h = 1234567891;
int i = 1234567891;
int j = 1234567891;
int k = 1234567891;
bool areAllSameValue = IntUtils.AreAllVariablesSameValue(a,b,c,d,e,f,g,h,i,j,k);
areAllSameValue.Dump(); //Linqpad method - dump this code into Linqpad to test
}
public class IntUtils
{
public static bool AreAllVariablesSameValue(params int[] values)
{
if (values == null || !values.Any())
{
return false;
}
int bitWiseAndValue = values[0];
foreach (var value in values)
{
bitWiseAndValue &= value;
}
return bitWiseAndValue == values[0];
}
}
如果其中一个值有不同的符号(负数),这也会指出。