C#中的 Delphi 等效程序

rseugnpd  于 12个月前  发布在  C#
关注(0)|答案(7)|浏览(145)

C#中的 Delphi 在语法上的等价物是什么,比如:

if (iIntVar in [2,96]) then 
  begin
    //some code
  end;

字符串
谢谢

ua4mk5z4

ua4mk5z41#

我更喜欢这里定义的方法:将变量与多个值进行比较
以下是乍得职位的转换:

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

xriantvc

xriantvc2#

没有这样的等价物。最接近的是集合的Contains()扩展方法。
范例:

var vals = new int[] {2, 96};
if(vals.Contains(iIntVar))
{
  // some code
}

字符串

anhgbhbe

anhgbhbe3#

在.Net中,.Contains是最接近的,但语法与您编写的相反。
您可以编写一个扩展方法来创建.In方法

public static bool In<T>(this T obj, IEnumerable<T> arr)
 {
  return arr.Contains(obj);
 }

字符串
而使用量将是

if (42.In(new[] { 12, 42, 46, 74 }) )
{
    //TODO: Something
}

dl5txlt9

dl5txlt94#

您可以创建此扩展方法:

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)) { /* ... */ }

0lvr5msh

0lvr5msh5#

为了扩展Mason惠勒在评论中所写的内容,这将是HashSet.Contains(在.NET 3.5下)。

int i = 96;
var set = new HashSet<int> { 2, 96 };

if (set.Contains(i))
{
   Console.WriteLine("Found!");
}

字符串

kcrjzv8t

kcrjzv8t6#

你可以写一个扩展方法

public static bool In(this int value, int[] range)
    {
        return (value >= range[0] && value <= range[1]);
    }

字符串

dffbzjpn

dffbzjpn7#

我知道这是一个老主题,但我喜欢这个,因为它更干净。(在.NET 6中测试)

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                
}

相关问题