Проблемы с проверкой int в массиве - PullRequest
0 голосов
/ 10 августа 2011

Я пытаюсь проверить значения 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 ]

3 голосов
/ 10 августа 2011

array.ToString возвращает строку "System.Int32[]".Использование Any со строкой проверяет предикат для каждого символа в строке.

Предполагая, что booking.EventID является int, таким как 1234, booking.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 голос
/ 10 августа 2011

Попробуйте,

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
}
1 голос
/ 10 августа 2011
// 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())))
1 голос
/ 10 августа 2011

Почему вы пытаетесь преобразовать в строковый массив?

array.ToString();//???

этот код вернет System.Int32 []

удалить ToString () !!!если вы хотите перечислить массив, используйте этот код вместо

array.AsEnumerable().Any(...
0 голосов
/ 10 августа 2011

Вместо выполнения «ToArray ()», попробуйте выполнить «ToList ()». Вы можете использовать метод «Содержит» для поиска.

...