Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
德尔福的C#等价物';在哪_C#_Delphi - Fatal编程技术网

德尔福的C#等价物';在哪

德尔福的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

在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方法

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!");
}