将对象列表转换为另一个对象
Casting a list of objects to another one
我有以下 classes(entities):实体(基础 class,有 3 个道具)和类别(从实体派生并添加一些其他道具)
当我从数据库中读取数据(填充方法 returns 实体列表)并且编译器不允许我从实体转换为类别时出现问题。
有问题的代码:
var categories = (Category)categoryDao.Read();
虽然我可以用一种非常不同的方式来完成这个过程:
var categories = new List<Category>();
foreach (var item in categoryDao.Read())
{
categories.Add((Category)item);
}
但这可能很糟糕而且没有必要。所以,问题是,我可以使用 LINQ + LAMBDA 以更简单的方式做到这一点,还是有其他技巧?
Read()
的 return 类型可能类似于 IEnumerable<Entity>
或 List<Entity>
。这就是为什么你不能将它们转换为单个 Category
.
如果您需要一个单行解决方案,您可以尝试
var categories = categoryDao.Read().OfType<Category>();
或(感谢@Binkan Salaryman)
var categories = categoryDao.Read().Cast<Category>();
(前者将 return 仅 Category
类型的元素 - 如果存在无法转换为 Category
的元素,后者将抛出异常)
我有以下 classes(entities):实体(基础 class,有 3 个道具)和类别(从实体派生并添加一些其他道具)
当我从数据库中读取数据(填充方法 returns 实体列表)并且编译器不允许我从实体转换为类别时出现问题。
有问题的代码:
var categories = (Category)categoryDao.Read();
虽然我可以用一种非常不同的方式来完成这个过程:
var categories = new List<Category>();
foreach (var item in categoryDao.Read())
{
categories.Add((Category)item);
}
但这可能很糟糕而且没有必要。所以,问题是,我可以使用 LINQ + LAMBDA 以更简单的方式做到这一点,还是有其他技巧?
Read()
的 return 类型可能类似于 IEnumerable<Entity>
或 List<Entity>
。这就是为什么你不能将它们转换为单个 Category
.
如果您需要一个单行解决方案,您可以尝试
var categories = categoryDao.Read().OfType<Category>();
或(感谢@Binkan Salaryman)
var categories = categoryDao.Read().Cast<Category>();
(前者将 return 仅 Category
类型的元素 - 如果存在无法转换为 Category
的元素,后者将抛出异常)