Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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#每个比较的多列表_C#_List_Foreach_Compare - Fatal编程技术网

C#每个比较的多列表

C#每个比较的多列表,c#,list,foreach,compare,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)

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

比如:

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#代码
公共bool CheckUsableID(int-id,List)
{
foreach(列表中的var对象)
{
if(list.id==id)
{
返回false;
}
}
返回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 }
}
public List CheckUsableID(int-id,List-List)
{
var listUsableId=新列表();
foreach(列表中的var对象)
{
if(object.Id==Id)
{
添加(对象);
}
}
返回listUsableId;
}
公共类对象
{
公共int Id{get;set}
}

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

在本例中,我假设
实际上是一个类,对吗?在这种情况下,需要重新定义对象

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;
}
public bool CheckUsableID(int-id,List-someTeamList)
{
clsSomeObject newObject=新的clsSomeObject();
newObject=someTeamList;
foreach(newObject中的var对象)
{
if(newObject.id==id)
{
返回false;
}
}
返回true;
}

您需要使用反射。这是你修改过的样品

// 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);
}
/C#代码
公共bool CheckUsableID(int-id,List)
{
foreach(列表中的var obj)
{
var objId=(int)GetValueFromObj(obj,“id”);
if(objId==id)
{
返回false;
}
}
返回true;
}
私有对象GetValueFromObj(对象obj,字符串propertyName)
{
返回obj.GetType().GetProperty(propertyName).GetValue(obj);
}

为什么不使用LINQ?没有必要循环浏览整个列表。让林克替你干些脏活吧

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

  • TeamList是一个列表,并且Team公开了属性ID
  • PlayerList是一个列表,并且Player的属性ID是公开的

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

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

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

如果您创建一个基类,那么您可以将该方法放在基类中:

您应该只有
(如果object.id==id)
您的
团队列表
真的是
列表吗?比如说,不是一个
列表
或类似的东西?这是要解决的第一件事。。。然后是foreach循环的语法和
if
条件。@eddie_cat:除了
object
是一个关键字,并且
列表中没有可用的
id
成员之外……没错。嗯,在将
var
重命名为非关键字并将列表更改为包含任何实际类型后,OP仍然需要更改语法位。是的,我知道这样写是为了简化和易于理解不,对不起,如果我解释它有困难,我会说法语。。。但是我想从另一个类调用这个方法!!这是我的学校项目。。我生成一个ID,然后检查该ID是否已经存在于列表的obj中。。。并且能够与不同的列表一起使用它!看起来真的很好。。我要试试这个!thx@MHX这对于所描述的问题来说是过分的。感谢您,您最好从
团队
玩家
对象(即
接口IHasId{int id{get;}}}
)中提取一个接口!!我不知道你能做到!我最近刚开始我的c#课程,书中似乎没有提到我们可以做到!!好的thx,我将阅读更多关于接口的内容!!lol@MHX as@Michael已经说过反射需要小心使用。只有在没有其他选项的情况下,您才应该这样做,例如,您正在处理匿名对象或在WebAPI服务中接收POJO,并且有任何其他实际限制,无法修改您的设计。如果它真的解决了你的问题,请将此标记为一个答案。看起来容易多了,但我不能在这个课堂项目中使用linq:这太愚蠢了。你是否在课堂上复习了一个特定的主题,指定了你应该如何处理这个问题?你是老师,不能期望你了解反思(如你的答案所示)并使用它而不是使用LINQ。我想我不会走得太远,因为我刚刚开始c#。。林克在我的书的末尾所以。。我想以后再说吧,但我会把你的答案留到未来的项目中!!XD THXlook也非常好,谢谢你
List<Team> TeamList = new List<Team>();
//populate TeamList from somewhere
ID = generateID();
CheckUsableID(ID, TeamList);