我正在尝试检查数组中的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;}
答案 0 :(得分:3)
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 :(得分: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()”。你可以使用“包含”方法进行搜索。