在C#中,类似于Delphi的in语法的等效语法是什么,例如:
if (iIntVar in [2,96]) then
begin
//一些代码
end;
该段代码是一个条件语句,如果变量 iIntVar 的值为 2 或 96,则执行注释中的代码。
感谢您的提议。
在C#中,类似于Delphi的in语法的等效语法是什么,例如:
if (iIntVar in [2,96]) then
begin
//一些代码
end;
感谢您的提议。
public static bool In(this T obj, params T[] arr)
{
return arr.Contains(obj);
}
if (intVar.In(12, 42, 46, 74) )
{
//TODO: Something
}
或者
if (42.In(x, y, z))
// do something
没有完全等价的方法。最接近的是集合的Contains()扩展方法。
示例:
var vals = new int[] {2, 96};
if(vals.Contains(iIntVar))
{
// some code
}
Contains
和in
不是一样的吗?它们都只是检查值是否在数组中。 - James[2..96]
,他使用的是[2,96]
。[2,96]
创建了一个包含值2和96的列表。如果他使用了[2..96]
,那么它将会创建一个包含值2、3、4、5、6、7、...、95、96的数组。此时,他将会检查两个数字之间的值,并且最好使用下限和上限检查,而不是数组包含性检查,这就是Delphi中in
运算符所做的事情。 - Randolpho[2,96]
,它们也都是集合,而且 Delphi 中检查集合的常数时间确实很好;我忘记了这一点。愚蠢的我花太多时间在 C# 上了。 - Randolphopublic static bool In<T>(this T obj, IEnumerable<T> arr)
{
return arr.Contains(obj);
}
if (42.In(new[] { 12, 42, 46, 74 }) )
{
//TODO: Something
}
public static class ExtensionMethods
{
public static bool InRange(this int val, int lower, int upper)
{
return val >= lower && val <= upper;
}
}
int i = 56;
if (i.InRange(2, 96)) { /* ... */ }
扩展Mason Wheeler在评论中写的内容,这将是HashSet<T>.Contains(在.NET 3.5下)。
int i = 96;
var set = new HashSet<int> { 2, 96 };
if (set.Contains(i))
{
Console.WriteLine("Found!");
}
你可以编写一个扩展方法
public static bool In(this int value, int[] range)
{
return (value >= range[0] && value <= range[1]);
}
public static class FooUtils
{
public static bool In(this object obj, params object[] arr)
{
return arr.Contains(obj);
}
}
使用方法:
int myNumber = 5;
if (myNumber.In(1, 5, 10))
{
// do something
}