C#多列表foreach比较

时间:2014-07-23 20:14:42

标签: c# list foreach compare

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

喜欢:

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;
    }

我只是想比较它们。

5 个答案:

答案 0 :(得分:1)

为什么不使用LINQ?没有必要遍历整个列表。让Linq为你做肮脏的工作。

bool hasUsableID = TeamList.Any(t => t.Id == ID);
bool hasUsableID = PlayerList.Any(p => p.Id == ID);

我假设

  • TeamList是一个List&lt;团队&gt;和团队已公开财产ID
  • PlayerList是List&lt;播放器&gt;和播放器已公开属性ID

答案 1 :(得分:1)

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

例如,我们可以定义一个接口:

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>或类似,则需要确保Team和{{1}实现Player接口,您将能够将它们传递给CheckUsableID方法:

IDomainObject

如果创建基类,则可以将该方法放在基类中:

答案 2 :(得分:0)

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

在这种情况下,我假设<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;
}

答案 3 :(得分:0)

你需要使用反射。在这里,您可以使用修改过的样本!

// 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);
}

答案 4 :(得分:-1)

尝试这样的事情:

发布您要比较的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 }
}