可能重复:
C#if语句匹配多个值
我经常发现自己编写代码,其中变量可以是A或B,例如当我在转发器上调用OnItemDataBound时:
protected void repeater_OnItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{}
}
Run Code Online (Sandbox Code Playgroud)
然后我常常想,必须有一种更简单的方法.我想写一些类似的东西:
if(x == (1 || 2))
Run Code Online (Sandbox Code Playgroud)
SQL有IN(..)运算符,C#中有类似的东西吗?
WHERE x IN(1,2)
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用switch语句,但这并不简单.如果可能的话,我希望它在If语句中完成.
Mar*_*ell 15
我认为现在很好; 但是,你可以这样做:
// note the array is actually mutable... just... don't change the contents ;p
static readonly ListItemType[] specialTypes =
new[]{ListItemType.Item, ListItemType.AlternatingItem};
Run Code Online (Sandbox Code Playgroud)
并检查:
if(specialTypes.Contains(e.Item.ItemType)) {
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
但是要强调:我实际上只是在switch这里使用,因为switch整数和枚举通过跳转表进行特殊的IL处理,使其非常有效:
switch(e.Item.ItemType) {
case ListItemType.Item:
case ListItemType.AlternatingItem:
// do stuff
break;
}
Run Code Online (Sandbox Code Playgroud)
voi*_*oid 12
您可以编写这样的扩展方法:
public static bool In<T>(this T x, params T[] values)
{
return values.Contains(x);
}
Run Code Online (Sandbox Code Playgroud)
并称之为:
1.In(2,3,4)
Run Code Online (Sandbox Code Playgroud)
但我会说这不值得努力.
如果你想模仿SQL IN语句,你可以做这样的事情...对于有2个项目的简单情况,这可能并不简单,但对于更多的项目,它肯定会.
(new[] { 1, 2 }).Contains(x);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4815 次 |
| 最近记录: |