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