In C#, instead of doing if(index == 7 || index == 8)
, is there a way to combine them? I'm thinking of something like开发者_运维技巧 if(index == (7, 8))
.
You can accomplish this with an extension method.
public static bool In<T>(this T obj, params T[] collection) {
return collection.Contains(obj);
}
Then...
if(index.In(7,8))
{
...
}
You could put the values that you need to compare into an inline array and use a Contains extension method. See this article for starters.
Several snippets demonstrating the concept:
int index = 1;
Console.WriteLine("Example 1: ", new int[] { 1, 2, 4 }.Contains(index));
index = 2;
Console.WriteLine("Example 2: ", new int[] { 0, 5, 3, 4, 236 }.Contains(index));
Output:
Example 1: True
Example 2: False
There is no way, in the current C# syntax set, to combine multiple right-hand-side operands to be passed to a single binary operator to the best of my knowledge.
Write your own extension methods so you can write
if (index.Between(7, 8)) {...}
where Between is defined as:
public static bool Between (this int a, int x, int y)
{
return a >= x && a <= y;
}
You could use this:
if (new List<int>() { 7, 8 }.Contains(index))
switch (GetExpensiveValue())
{
case 7: case 8:
// do work
break;
}
This obviously takes more code, but it may save you from evaluating a function a bunch of times.
if ((new int[]{7,8}).Contains(index))
No way to do that, but you could certainly do a range using if( index >=7 && index <= 8 )
. But giving it a list of numbers would require you to create an array or list object and then use a method to do this. But that's just overkill.
Do u need something like that
int x = 5;
if((new int[]{5,6}).Contains(x))
{
Console.WriteLine("true");
}
Console.ReadLine();
精彩评论