Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 对列表中的属性使用.Contains()_C#_.net_List_Contains - Fatal编程技术网

C# 对列表中的属性使用.Contains()

C# 对列表中的属性使用.Contains(),c#,.net,list,contains,C#,.net,List,Contains,我有一份活动清单。在Activity类中有一个ID属性(为了参数起见是Guid)。我想检查此列表中是否有Guid为的活动。与此相反: foreach(Activity activity in ActivityList) { if(activity.Id == GuidToCompare) //Code here } 如果我只有一个guid列表(而不是一个活动列表)并使用.Contains(),是否有一种更有效的方法来实现与我相同的结果 我有一个名为ActivityAnd

我有一份活动清单。在Activity类中有一个ID属性(为了参数起见是Guid)。我想检查此列表中是否有Guid为的活动。与此相反:

foreach(Activity activity in ActivityList)
{
    if(activity.Id == GuidToCompare)
        //Code here
}
如果我只有一个guid列表(而不是一个活动列表)并使用.Contains(),是否有一种更有效的方法来实现与我相同的结果

我有一个名为ActivityAndPO的结构列表。此结构中有一个Guid。 我有一张PO的名单。PO类中有一个Guid


我想循环浏览ActivityAndPO列表中的所有对象,其中Guid存在于PO列表中。

查看LINQ,您可以将代码替换为:
ActivityList.Any(I=>I.Id==GuidToCompare)

当然可以

但是由于
Id
意味着最多会有一个活动:

//var act = ActivityList.Where(a => a.Id == GuidToCompare).SingleOrDefault(); // clearer
var act = ActivityList.SingleOrDefault(a => a.Id == GuidToCompare);          // shorter
if (act != null)
{
    //Code here
}

我还没有测试过它,但我相当肯定它会起作用:

if ( ActivityList.Any ( a => a.Id == GuidToCompare ) ) {
    // TODO - Exists.
}

MSDN Any:

仅为您提供使用
Linq编写此查询的所有方法

var result = (from activity in activityList
              where activity.Id == GuidToCompare
              select activity ).FirstOrDefault();

if(result != null)
    /* Code here */

现在,由您选择可读性更强的代码段;)

如果一次只查找一个Id,没有比这更有效的方法了

如果要多次查找ID,可以构建哈希集:

var activityIdsQuery = from a in ActivityList
                       select a.Id;
HashSet<Guid> activityIds = new HashSet<Guid>(activityIdsQuery);

//Use the hashset
activityIds.Contains(id);
var activityidskquery=来自活动列表中的
选择a.Id;
HashSet activityIds=新的HashSet(activityIdsQuery);
//使用hashset
activityid.Contains(id);
如果需要查找活动实例,可以构建字典(仅当Id唯一时有效):

Dictionary activities=ActivityList.ToDictionary(a=>a.Id);

其他解决方案使用Id上带有Where/FirstOrDefault/Any的Linq不会比您的更有效。

要查找具有给定GUID的所有活动对象,您可以使用:

var results = ActivityList.FindAll(item => item.ID == GuidToCompare);

对于无法使用LINQ的用户:

List ActivityList=new List();
foreach(ActivityList.FindAll中的Activity活动)(委托(活动a)
{
返回a.Id==GuidToCompare;
}))
{
//代码在这里
}
var activityIdsQuery = from a in ActivityList
                       select a.Id;
HashSet<Guid> activityIds = new HashSet<Guid>(activityIdsQuery);

//Use the hashset
activityIds.Contains(id);
Dictionary<Guid, Activity> activities = ActivityList.ToDictionary(a => a.Id);
var results = ActivityList.FindAll(item => item.ID == GuidToCompare);