Я не особо разбираюсь в .NET 4.0 (пока использую 3.5), но думаю, что нет никакого способа добиться эффекта, которого хочет Pure.Krome.
Но приближение к этому виду сравнения может быть достигнуто с помощью массивов и методов расширения, предоставляемых LINQ.
Вот маленький пример.
string foo = @"very weird";
if (new[] { @"don't do it", @"very weird" }.Contains(foo))
{
Console.WriteLine(@"bingo string");
}
int baa = 7;
if (new []{5, 7}.Contains(baa))
{
Console.WriteLine(@"bingo int");
}
Это выводит:
bingo string
bingo int
Этот способ потребляет больше ресурсов, чем простая цепочка сравнений и логических операторов, но обеспечивает синтаксис, подобный тому, который хочет получить Pure.Krome.
Если вы не хотите определять массивы с помощью new [] (это действительно некрасиво в логических условиях), вы можете определить для себя метод расширения.
public static class Extensions
{
public static bool IsOneOf<T>(this T obj, params T[] args)
{
return args.Contains(obj);
}
}
Таким образом, вы можете использовать этот метод расширения:
if (baa.IsOneOf(5, 7, 9, 10))
{
Console.WriteLine(@"bingo int");
}
Вывод действительно предсказуемый, хе.