c#多列表foreach比较

本文关键字:比较 foreach 列表 | 更新日期: 2023-09-27 18:14:22

我想比较列表中一个对象的值和一个对象的值…并且能够与其他对象类型列表一起使用。

:

ID = generateID();
CheckUsableID(ID, TeamList); 
// or CheckUsableID(ID, PlayerList);

请帮帮我!

// C# Code
public bool CheckUsableID(int id, List<object> list)
    {
        foreach(var object in list)
        {
            if (list<object>.id == id)
            {
                return false;
            }
        }
            return true;
    }

我只是想比较一下

c#多列表foreach比较

为了检查不同类型的列表,您将需要一个接口或基类,所有可能出现在列表中实现的对象。有了这些,就可以在定义方法时使用泛型。

例如,我们可以定义一个接口:
public interface IDomainObject
{
    int id { get; set; }
}

然后我们可以用泛型重新定义方法:

public bool CheckUsableID<T>(int id, List<T> list) where T : IDomainObject
{
    foreach(var item in list)
    {
        if (item.id == id)
        {
            return false;
        }
    }
        return true;
}

假设TeamListList<Team>或类似的,PlayerListList<Player>或类似的,你只需要确保TeamPlayer实现IDomainObject接口,你就可以将它们传递给CheckUsableID方法:

List<Team> TeamList = new List<Team>();
//populate TeamList from somewhere
ID = generateID();
CheckUsableID(ID, TeamList);

如果你创建了一个基类,你可以把方法放在基类中:

为什么不用LINQ呢?不需要循环遍历整个列表。

让Linq帮你做这些脏活。
bool hasUsableID = TeamList.Any(t => t.Id == ID);
bool hasUsableID = PlayerList.Any(p => p.Id == ID);

我假设

  • TeamList是一个列表和Team具有暴露的属性ID
  • PlayerList是List和Player的属性ID暴露

您需要使用反射。给你修改后的样品!

// C# Code
public bool CheckUsableID(int id, List<object> list)
{
    foreach (var obj in list)
    {
        var objId = (int)GetValueFromObj(obj, "id");
        if (objId == id)
        {
            return false;
        }
    }
    return true;
}
private object GetValueFromObj(object obj, string propertyName)
{
    return obj.GetType().GetProperty(propertyName).GetValue(obj);
}

首先,您有很多语法错误和关键字的不当使用。我将提供一个示例,您可以自己修复它:

在这种情况下,我假设<object>实际上是一个类,对吗?在这种情况下,您需要重新定义对象。

public bool CheckUsableID(int id, List<clsSomeObject> someTeamList)
{
    clsSomeObject newObject = new clsSomeObject();
    newObject = someTeamList;
    foreach(var object in newObject)
    {
        if (newObject.id == id)
        {
            return false;
        }
    }
        return true;
}

试试这样:

你发布一个你想要比较的ID列表,并获取一个ID列表。

public List<SomeObject > CheckUsableID(int id, List<SomeObject > list) 
{
      var listUsableId = new List<SomeObject >();
      foreach(var object in list)
        {
            if (object.Id == id)
            {
                listUsableID.add(object);
            }
        }
       return listUsableId;
}
public class SomeObject 
{
    public int Id { get; set }
}