我想比较列表中对象的值和值... 并能够将其与其他对象类型列表一起使用。
喜欢:
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;
}
我只是想比较它们。
答案 0 :(得分:1)
为什么不使用LINQ?没有必要遍历整个列表。让Linq为你做肮脏的工作。
bool hasUsableID = TeamList.Any(t => t.Id == ID);
bool hasUsableID = PlayerList.Any(p => p.Id == 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;
}
假设TeamList
为List<Team>
或类似且PlayerList
为List<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 }
}