在数组中检查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;}
array.ToString
返回字符串"System.Int32[]"
。将Any
与字符串一起使用会检查字符串中每个字符的谓词。
假设booking.EventID
是诸如1234
的int
,则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"方法进行搜索。