我有以下声明:
while ((leftSide.Count-rightSide.Count!=-1)&&(leftSide.Count-rightSide.Count!= 0))
{
// Do stuff here
}
我很想写这样的东西:
while (leftSide.Count - rightSide.Count ! in [-1, 0])
{
// Do stuff here
}
但这是非法的语法。我想知道,有什么办法吗?我不知道一些语法?
我想查看一组数字中的计数差异,而不必再次重新包含该语句的整个左侧?
我想我可以这样做:
int x = leftSide.Count-rightSide.Count;
while ((x != -1) && (x != 0))
{
// Do stuff here
x = leftSide.Count-rightSide.Count;
}
但我不愿意。
如果没有办法进行“设定”比较,那么知道为什么吗? C#是一种功能齐全的语言,这样的东西似乎很奇怪。
答案 0 :(得分:8)
使用扩展方法,您可以轻松创建In
运算符:
public static class Extensions
{
public static Boolean In<T>(this T obj, params T[] items)
{
return items.Contains(obj);
}
}
用法:
Int32 i = 10;
i.In(10, 20, 30); // True
答案 1 :(得分:7)
它不需要使用语言,因为它可以很容易地存在于库中:
private static readonly int[] ValidValues = { -1, 0 };
...
if (!ValidValues.Contains(leftSide.Count - rightSide.Count))
{
...
}
我在这里使用了一个数组,因为它太小......但是你想考虑在大型集合中使用HashSet<int>
。
答案 2 :(得分:1)
new[]{0,1}.Contains(leftSide.Count - rightSide.Count)
答案 3 :(得分:0)
答案 4 :(得分:0)
您可以使用HashSet
(或实施ISet的任何内容)进行集合比较。为了您的目的,这是矫枉过正。
我怀疑使用x&gt; 0会对你的例子起作用。
答案 5 :(得分:0)
如果金额较大,您可以声明List<T>
并使用Contains
方法:
List<int> values = new List<int> {-1, 0};
if(!values.Contains(x))
//do stuff
答案 6 :(得分:0)
使用扩展方法:
public static class DoubleInExtension
{
public static bool IsIn(this double x, double a, double b)
{
return x >= a && x <= b;
}
}
答案 7 :(得分:0)
int[] set = {-1, 0};
while (!set.Contains(leftSide.Count - rightSide.Count))
{
//Do stuff here
}