在数组中检查int的问题

本文关键字:问题 int 检查 数组 | 更新日期: 2023-09-27 18:04:58

我正在尝试检查数组中的int值,并在此基础上进行一些计算,但下面的代码不起作用:

string EventIds = getVoucher.EventIDs;
int[] array = EventIds.Split(',')
                      .Select(x => int.Parse(x, CultureInfo.InvariantCulture))
                      .ToArray();
if(array.ToString().Any(s => booking.EventID.ToString().Contains(s)))
{do something; } else { do something;}

在数组中检查int的问题

array.ToString返回字符串"System.Int32[]"。将Any与字符串一起使用会检查字符串中每个字符的谓词。

假设booking.EventID是诸如1234int,则booking.EventID.ToString()返回字符串"1234"

因此,您的代码检查"1234"是否包含"System.Int32[]"中的任何字符(此处:true,因为"1234"包含"System.Int32[]"'3'(。


你没有说想要的结果是什么,但我猜你正在寻找这样的东西:

if (array.Any(s => booking.EventID == s))
{
    // ...
}

if (Array.IndexOf(array, booking.EventID) != -1)
{
    // ...
}
// cache it to avoid multiple time casting
string bookingId = booking.EventID.ToString();
// you can do filtering in the source array without converting it itno the numbers
// as long as you won't have an Exception in case when one of the Ids is not a number
if(EventIds.Split(',').Any(s => bookingId.Contains(s)))
{
  // ..
}
else
{
 // ...
}

此外,根据源数组的生成方式,您应该考虑Strign.Trim((来删除空格:

if(EventIds.Split(',').Any(s => bookingId.Contains(s.Trim())))

为什么要转换为字符串数组?

array.ToString();//???

此代码将返回System.Int32[]

删除ToString((!!!如果您想枚举数组,请使用此代码代替

array.AsEnumerable().Any(...

试试这个,

if (
        EventIds.Split(',').OfType<string>()
            .Any(e => booking.EventID.ToString().Contains(e))
    )
{
    //Some member of a comma delimited list is part of a booking eventID ???
}
else
{
    //Or Not
}

如果这不是您想要做的,那么您的代码就是错误的。

编辑:

看完你的评论后,我想你想要更合乎逻辑的

If (EventIDs.Split(',').Select(s => 
    int.Parse(s)).OfType<int>().Contains(booking.EventID))
{
    //Ther booking ID is in the list
}
else
{
    //It isn't
}

与其执行"ToArray((",不如尝试执行"ToList(("。您可以使用"Contains"方法进行搜索。