C# List<T>使用Find方法获取指定元素的单个属性值
实现方案
首先给出示例用的Part类定义,和官方示例保持一致:
public class Part { public int PartId { get; set; } public string PartName { get; set; } // 可自行扩展其他属性 }
需求1:查找PartId为1634的对象,将PartName赋值给变量/文本框
List<T>.Find方法会直接返回匹配到的Part对象本身,不需要调用ToString(),直接访问对象属性即可:
// 初始化泛型列表,省略填充逻辑 List<Part> parts = new List<Part>(); // 查找匹配的Part对象 Part targetPart = parts.Find(p => p.PartId == 1634); // 判空避免空引用异常 if (targetPart != null) { // 赋值给字符串变量 string partName = targetPart.PartName; // 赋值给文本框示例(WinForm场景) // txtPartName.Text = targetPart.PartName; }
需求2:直接获取单个属性的原始值
如果不需要完整的Part对象,仅需单个属性,可以用两种方式实现,全程不会触发对象的ToString()方法:
方式1:配合空条件运算符直接取值(推荐)
// 直接获取PartName,找不到匹配项时返回null string targetPartName = parts.Find(p => p.PartId == 1634)?.PartName; // 找不到时返回自定义默认值 string targetPartNameWithDefault = parts.Find(p => p.PartId == 1634)?.PartName ?? "未找到对应部件"; // 同理获取PartId值 int? targetPartId = parts.Find(p => p.PartId == 1634)?.PartId;
方式2:LINQ投影取值(适合仅需要单个属性的场景)
using System.Linq; // 需先引入LINQ命名空间 // 筛选匹配项后直接投影取属性,不需要拿到完整Part对象 string partName = parts.Where(p => p.PartId == 1634) .Select(p => p.PartName) .FirstOrDefault();
注意:两种方案找不到匹配项时都会返回对应类型的默认值(引用类型返回null,值类型返回对应默认值),使用前建议做非空校验避免异常。
内容的提问来源于stack exchange,提问作者Arsalan Ahmadi
相关产品推荐
相关产品推荐

