将对象列表转换为另一个对象

Posted

技术标签:

【中文标题】将对象列表转换为另一个对象【英文标题】:Casting a list of objects to another one 【发布时间】:2015-09-03 21:35:28 【问题描述】:

我有以下类(实体):实体(基类,有 3 个道具)和类别(从实体派生并添加一些其他道具)

当我从数据库中读取数据(填充方法返回一个实体列表)并且编译器不允许我从实体转换为类别时,就会出现问题。

有问题的代码:

var categories = (Category)categoryDao.Read();

不过,我可以用一种非常不同的方式来完成这个过程:

var categories = new List<Category>();
foreach (var item in categoryDao.Read())

    categories.Add((Category)item);

但这可能是不好的和不必要的。那么,问题来了,我可以使用 LINQ + LAMBDA 以更简单的方式做到这一点,还是有其他技巧?

【问题讨论】:

Read()的返回类型是什么? 你可以看看IEnumerable`1.Cast`1()IEnumerable`1.ToList() @haim770:可能是Entity @haim770 它是实体类型(我在上面提到过) 【参考方案1】:

Read() 的返回类型可能类似于IEnumerable&lt;Entity&gt;List&lt;Entity&gt;。这就是为什么您不能将它们转换为单个 Category

如果你需要一个单一的解决方案,你可以尝试

var categories = categoryDao.Read().OfType<Category>();

或(感谢@Binkan Salaryman)

var categories = categoryDao.Read().Cast<Category>();

(前者将只返回Category类型的元素 - 如果存在无法转换为Category的元素,后者将抛出异常)

【讨论】:

以上是关于将对象列表转换为另一个对象的主要内容,如果未能解决你的问题,请参考以下文章

如何通过元素的属性将集合转换/转换为另一个集合?

将 stdClass 对象转换/转换为另一个类

将对象数组转换为另一个对象数组

使用 jQuery 将一个对象数组转换为另一个对象数组

将 DataGridViewComboBoxColumn 项转换为另一个对象失败

Ext JS 4:使用 JavaScript 将 JSON 对象转换为另一个 JSON 对象