C#中如何将List<object>转换为List<Node>?
解决方法
先看你代码里的明显错误:强制转换时写错了类型名,应该用(Node)而不是(nodes)(小写的nodes是你要声明的变量名,不是类型)。
根据你的场景,分两种情况处理:
1. 集合元素本身就是Node实例
如果Element.objects里的每个object实际上都是Node对象,修正转换代码即可:
List<Node> nodes = objects.Select(s => (Node)s).ToList();
要是担心集合里混有非Node类型的元素,推荐更安全的写法,避免抛出异常:
List<Node> nodes = objects.Select(s => s as Node) .Where(node => node != null) .ToList();
2. 集合元素是其他类型,需要属性映射
如果objects里的元素是别的类实例,需要把它的属性值映射到Node上。比如假设原对象有Id属性,写法如下:
// 未知类型时用反射取值 List<Node> nodes = objects.Select(s => new Node { id = (long)s.GetType().GetProperty("Id").GetValue(s) }).ToList(); // 已知原类型时,直接强转更高效 List<Node> nodes = objects.Select(s => { var source = s as YourSourceType; return source != null ? new Node { id = source.Id } : null; }).Where(node => node != null).ToList();
内容的提问来源于stack exchange,提问作者Nguyễn Hoài Nam
相关产品推荐
相关产品推荐

