德尔福的C#等价物';在哪
在C#中,Delphi在语法上的等价物是什么,比如:德尔福的C#等价物';在哪,c#,delphi,C#,Delphi,在C#中,Delphi在语法上的等价物是什么,比如: if (iIntVar in [2,96]) then begin //some code end; 谢谢没有这样的等价物。最接近的是集合的扩展方法 例如: var vals = new int[] {2, 96}; if(vals.Contains(iIntVar)) { // some code } 在.Net中,.Contains是最接近的,但语法与您编写的相反 您可以编写一个扩展方法来创建.In方法 p
if (iIntVar in [2,96]) then
begin
//some code
end;
谢谢没有这样的等价物。最接近的是集合的扩展方法 例如:
var vals = new int[] {2, 96};
if(vals.Contains(iIntVar))
{
// some code
}
在.Net中,.Contains是最接近的,但语法与您编写的相反
您可以编写一个扩展方法来创建.In方法
public static bool In<T>(this T obj, IEnumerable<T> arr)
{
return arr.Contains(obj);
}
您可以创建此扩展方法:
public static class ExtensionMethods
{
public static bool InRange(this int val, int lower, int upper)
{
return val >= lower && val <= upper;
}
}
您可以编写一个扩展方法
public static bool In(this int value, int[] range)
{
return (value >= range[0] && value <= range[1]);
}
公共静态布尔输入(此int值,int[]范围)
{
return(value>=range[0]&&value我更喜欢这里定义的方法:
以下是乍得职位的转换:
public static bool In(this T obj, params T[] arr)
{
return arr.Contains(obj);
}
而且用法也会很简单
if (42.In(new[] { 12, 42, 46, 74 }) )
{
//TODO: Something
}
if (intVar.In(12, 42, 46, 74) )
{
//TODO: Something
}
或
要扩展Mason Wheeler在评论中所写的内容,可以使用HashSet.Contains(在.NET3.5下)
inti=96;
var set=newhashset{2,96};
如果(集合包含(i))
{
控制台。WriteLine(“找到!”);
}
这里有一个类似的问题,相似,但距离不够近,无法进行投票。不,不。类似的问题是:没有这样的等价物。是否包含与中的相同的,因为它们都只是检查值是否在数组中?只包含对那些值的检查,而不是b在他们之间,谢谢你的时间和回答!@John Nolan:@Pascal没有使用[2..96]
,他使用[2,96]
[2,96]
创建了一个包含值2和96的列表。他是否使用了[2..96]
,它将创建一个包含值2、3、4、5、6、7、…、95、96的数组。在这一点上,他将检查两个数字之间的值,并且最好使用下限和上限检查,而不是数组包含,这是Delphi中
操作符中的所做的。实际上[2..96]将创建一个包含值2..96的集合,该集合使用更少的字节来表示,并且可以在O(1)时间内进行测试,而不是数组扫描所需的线性搜索。使用params数组会使语法更精确。42.in(12,42,46,74);谢谢你的时间和回答!@Mark,+1,确实会,不过,这取决于你的数组是否已经在变量中。嗯,应该是这样,因为幻数列表是一种代码味道。在这种情况下,IEnumerable允许你传入数组,或者list,等等。你仍然可以传入数组,但你只能传入arr是的。我同意这些神奇的数字。我在检查枚举(例如,state.In(Closed,Closing,Unavailable)…等)时使用了这些数字
if (intVar.In(12, 42, 46, 74) )
{
//TODO: Something
}
if (42.In(x, y, z))
// do something
int i = 96;
var set = new HashSet<int> { 2, 96 };
if (set.Contains(i))
{
Console.WriteLine("Found!");
}