Что-то похожее на оператор SQL в IN.NET Framework?
У меня есть эта функция:
public bool IsValidProduct(int productTypeId)
{
bool isValid = false;
if (productTypeId == 10 ||
productTypeId == 11 ||
productTypeId == 12)
{
isValid = true;
}
return isValid;
}
но мне интересно, есть ли более простой способ написать это, например:
public bool IsValidProduct(int productTypeId)
{
bool isValid = false;
if (productTypeId.In(10,11,12))
{
isValid = true;
}
return isValid;
}
Я знаю, что мог бы написать метод расширения, чтобы справиться с этим, мне просто любопытно, есть ли уже что-то там или есть лучший способ написать это.
8 ответов
Нет, я не верю в это, но вы можете написать такой метод расширения, который позволит вашему коду работать точно так же, как написано.
public static bool In<T>(this T source, params T[] args) {
return args.Contains(source);
}
Затраты на массив немного, хотя. Возможно, вы захотите добавить специальные случаи для меньшего фиксированного числа параметров.
Хм, вы могли бы сделать это:
public bool IsValidProduct(int productTypeId)
{
bool isValid = false;
if (new[] {10,11,12}.Contains(productTypeId))
{
isValid = true;
}
return isValid;
}
или если вы хотите то же самое, короче:
public bool IsValidProduct(int productTypeId)
{
return (new[] {10,11,12}.Contains(productTypeId));
}
Вы могли бы сделать что-то вроде:
new int[] { 10,11,12 }.Contains(productTypeID);
или идите дальше, создайте расширение для int в соответствии с:
public static bool In(this int i, params int[] ints)
{
return ints.Contains(i);
}
С использованием:
if (productTypeID.In(10,11,12)) { ... }
Я бы не сказал, что они самые эффективные, но возможно да.
Я не думаю, что есть что-то во фреймворке, поэтому вам придется написать свой собственный метод расширения. Самое близкое, что вы можете получить с linq, это что-то вроде:
if(new[] { 10, 11, 12 }.Contains(productTypeId)) { ... }
var validIds = new [] {10, 11, 12};
validIds.Contains (ProductID);
Вы можете использовать метод расширения Contains из.NET 3.5. Работает на всех перечисляемых типах:
if (new [] { 10, 11, 12 }.Contains(productTypeId))
{
...
}
Это сработало бы, если все нужные вам числа находятся в диапазоне, а не совсем в функции "IN", но вы можете найти это полезным.
if (Enumerable.Range(10, 3).Contains(productTypeId))