我有这个功能:
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;
}
我知道我可以写一个扩展方法来处理这个问题,我只是好奇是否已经存在某些内容或者是否有更好的方法来编写它。
答案 0 :(得分:11)
new [] {10, 11, 12}.Contains(productTypeId)
答案 1 :(得分:5)
不,我不相信,但你可以写一个像这样的扩展方法,它允许你的代码完全按照书面的方式工作。
public static bool In<T>(this T source, params T[] args) {
return args.Contains(source);
}
虽然数组开销有点多。您可能希望为较小的固定数量的参数添加特殊情况。
答案 2 :(得分:3)
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));
}
答案 3 :(得分:2)
您可以采取以下措施:
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)) { ... }
我不会说他们是最有效的,但可能是的。
答案 4 :(得分:1)
我认为框架中没有任何内容,因此您必须编写自己的扩展方法。使用linq最接近的是:
if(new[] { 10, 11, 12 }.Contains(productTypeId)) { ... }
答案 5 :(得分:0)
您可以使用.NET 3.5中的Contains扩展方法。它适用于所有可枚举的类型:
if (new [] { 10, 11, 12 }.Contains(productTypeId))
{
...
}
答案 6 :(得分:0)
var validIds = new [] {10,11,12};
validIds.Contains(的productId);
答案 7 :(得分:0)
如果您想要的数字都在一个范围内,而不是“IN”功能,那么这将有效。但您可能会发现它很有用。
if (Enumerable.Range(10, 3).Contains(productTypeId))