检查数组中的int的问题

时间:2011-08-10 15:32:52

标签: c# arrays linq-to-sql c#-3.0

我正在尝试检查数组中的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;}

5 个答案:

答案 0 :(得分:3)

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

假设booking.EventIDint,例如1234booking.EventID.ToString()会返回字符串"1234"

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


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

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

if (Array.IndexOf(array, booking.EventID) != -1)
{
    // ...
}

答案 1 :(得分:1)

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

array.ToString();//???

此代码将返回 System.Int32 []

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

array.AsEnumerable().Any(...

答案 2 :(得分: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
{
 // ...
}

此外,取决于如何生成源数组,您应该考虑String.Trim()来删除空格:

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

答案 3 :(得分:1)

试试这个,

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
}

答案 4 :(得分:0)

不要执行“ToArray()”,而是尝试执行“ToList()”。你可以使用“包含”方法进行搜索。