如何在C#的一组对象中查找特定ID值的对象?
在C#中查找匹配ID的对象:可行方案与最佳实践
首先明确说:完全可行!不过你现在的问题核心在于这9个对象是独立的变量,没有统一的集合结构支撑迭代——所以第一步得把它们整合到一个集合(比如数组、List<T>)里,这样就能轻松遍历切换对象了。下面给你几种实用的实现方法:
方法1:将对象放入集合后遍历(最通用)
先把你的9个对象放进一个List<T>或者数组,然后用foreach循环逐个检查ID,找到匹配的就拿出来用:
// 先定义你的对象类(假设是这样的结构) public class YourObject { public int Id { get; set; } // 其他属性... } // 假设你已经有了9个对象 var obj1 = new YourObject { Id = 1 }; var obj2 = new YourObject { Id = 2 }; // ... 直到obj9 // 把它们放进List var objectList = new List<YourObject> { obj1, obj2, obj3, obj4, obj5, obj6, obj7, obj8, obj9 }; // 目标ID int targetId = 5; YourObject matchedObject = null; // 遍历查找 foreach (var obj in objectList) { if (obj.Id == targetId) { matchedObject = obj; break; // 找到就退出循环,不用继续遍历 } } // 后续操作:检查是否找到对象 if (matchedObject != null) { // 用matchedObject做你需要的操作 }
方法2:用LINQ查询(更简洁)
如果项目里引用了LINQ(默认C#项目都支持),可以用一行代码完成查找,非常简洁:
// 同样先把对象放进集合 var objectList = new List<YourObject> { obj1, obj2, ..., obj9 }; int targetId = 5; // 找到第一个匹配ID的对象,没找到返回null var matchedObject = objectList.FirstOrDefault(obj => obj.Id == targetId); if (matchedObject != null) { // 后续操作 }
如果确定一定有且只有一个匹配的对象,也可以用First(),但如果没找到会抛出异常,所以FirstOrDefault()更安全。
不推荐的方法:用反射遍历独立变量
如果你实在不想把对象放进集合,理论上可以用反射遍历当前类中的所有对象字段,但这种方法代码复杂、性能差,而且维护起来很麻烦,除非特殊场景,否则强烈不建议。举个简单例子(仅作演示,别在生产代码里用):
int targetId = 5; YourObject matchedObject = null; // 获取当前类的所有字段 var fields = this.GetType().GetFields(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public); foreach (var field in fields) { if (field.FieldType == typeof(YourObject)) { var obj = (YourObject)field.GetValue(this); if (obj.Id == targetId) { matchedObject = obj; break; } } }
总结
最推荐的是方法1或方法2,把对象放进集合是最符合C#编程习惯的做法,代码清晰、易维护,性能也没问题。单独的变量没法直接循环,因为它们没有迭代的结构,集合就是为了解决这类批量操作问题而生的。
内容的提问来源于stack exchange,提问作者Fabio R.
相关产品推荐
相关产品推荐

