在列表中的属性上使用. contains()
本文关键字:contains 列表 属性 | 更新日期: 2023-09-27 18:16:24
我有一个活动列表。在Activity类中是一个ID属性(为了参数的目的,是一个Guid)。我想检查这个列表是否有一个活动在它与我有一个向导。而不是这样:
foreach(Activity activity in ActivityList)
{
if(activity.Id == GuidToCompare)
//Code here
}
是否有一个更有效的方法来实现相同的结果,我可以,如果我只是有一个Guids列表(而不是活动的列表),并使用。contains ()?
我有一个名为ActivityAndPO的结构体的列表。在这个结构体中是一个Guid。我有一份订单清单。在PO类中是一个Guid。
我想循环遍历ActivityAndPO列表中的所有对象,其中Guid存在于PO列表中。
可以。
foreach(Activity activity in ActivityList.Where(a => a.Id == GuidToCompare) )
{
//Code here
}
但由于Id
意味着最多有1个活动:
//var act = ActivityList.Where(a => a.Id == GuidToCompare).SingleOrDefault(); // clearer
var act = ActivityList.SingleOrDefault(a => a.Id == GuidToCompare); // shorter
if (act != null)
{
//Code here
}
看一下LINQ,你可以用它替换你的代码:ActivityList.Any(i => i.Id == GuidToCompare);
foreach(var activity in ActivityList.Where(p=>p.Id == GuidToCompare))
{
// Code here
}
查找具有给定GUID的所有活动对象,您可以使用:
var results = ActivityList.FindAll(item => item.ID == GuidToCompare);
如果您一次只查找一个Id,那么没有比这更有效的方法了。
如果你要查找id多次,你可以建立一个HashSet:
var activityIdsQuery = from a in ActivityList
select a.Id;
HashSet<Guid> activityIds = new HashSet<Guid>(activityIdsQuery);
//Use the hashset
activityIds.Contains(id);
如果你需要找到一个实例的活动,你可以建立一个字典(只有当Id是唯一的):
Dictionary<Guid, Activity> activities = ActivityList.ToDictionary(a => a.Id);
其他解决方案使用Linq与Where/FirstOrDefault/Any在Id上不会比你的更有效。
我还没有测试过,但我很确定这应该可以工作:
if ( ActivityList.Any ( a => a.Id == GuidToCompare ) ) {
// TODO - Exists.
}
MSDN Any: http://msdn.microsoft.com/en-us/library/bb534972.aspx
为您提供使用Linq
编写此查询的所有方法
var result = (from activity in activityList
where activity.Id == GuidToCompare
select activity ).FirstOrDefault();
if(result != null)
/* Code here */
现在,由您来选择更具可读性的代码段;)
对于不会使用LINQ的用户:
List<Activity> ActivityList = new List<Activity>();
foreach (Activity activity in ActivityList.FindAll(delegate(Activity a)
{
return a.Id == GuidToCompare;
}))
{
//Code here
}