Unity/C#中通过内部变量查找列表中Item实例失败的问题
问题分析与解决方案
核心问题:变量名冲突
你的ItemReference方法里,lambda表达式的参数名和方法的参数名都是name,这会导致lambda内部的name.GetName()逻辑完全错误——实际是在调用方法参数name(string类型)的GetName(),而不是列表中item实例的方法。
修正步骤
- 修改变量名避免冲突,同时修正C#方法的大小写规范(List的查找方法是
Find,首字母大写):
public item ItemReference(string targetName){ return List.Find(item => item.GetName().Equals(targetName)); }
这里把方法参数改为targetName,lambda参数用item,明确指向列表中的item实例。
- 可选:处理字符串大小写敏感问题
如果需要忽略大小写匹配,可调整Equals的比较规则:
item.GetName().Equals(targetName, StringComparison.OrdinalIgnoreCase)
- 关于Contains方法无效的原因
Contains默认比较对象引用,除非你在item类中重写Equals和GetHashCode方法,否则即使name相同,也会被判定为不同对象。若要使用Contains,需在item类添加:
public override bool Equals(object obj){ if(obj is item otherItem){ return name.Equals(otherItem.name); } return false; } public override int GetHashCode(){ return name.GetHashCode(); }
内容的提问来源于stack exchange,提问作者Shadykhaos
相关产品推荐
相关产品推荐

