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;
}
我只是想比较一下
为了检查不同类型的列表,您将需要一个接口或基类,所有可能出现在列表中实现的对象。有了这些,就可以在定义方法时使用泛型。
例如,我们可以定义一个接口: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;
}
假设TeamList
是List<Team>
或类似的,PlayerList
是List<Player>
或类似的,你只需要确保Team
和Player
实现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 }
}