将对象强制转换为IEnumerable<我知道T是多少

本文关键字:我知道 多少 IEnumerable 对象 转换 | 更新日期: 2023-09-27 18:01:45

我有一个包含IEnumerable的对象,其中T可以是我在数据模型中拥有的几个类之一。

假设T可以是Employee或Employer。现在有了一个裸对象,知道它肯定持有一个IEnumerable我怎么知道它持有的是哪个类型呢?雇员还是雇主?或者更好的是,我如何将对象强制转换或反射到IEnumerable?

如果我在设置对象时保留类型,它会帮助我将对象强制转换或反射到它最初的样子吗?

如果我保留这些

object source = db.Employees; //IEnumerable<Employee>
type dataType = Employee;

可以强制转换或反射回IEnumerable of Employees吗?

将对象强制转换为IEnumerable<我知道T是多少

一般情况下可以使用Reflection:

Type typeOfSource = source.GetType().GetGenericArguments()[0];
if (typeOfSource == typeof(Employee)) {
  ...
}
else if (typeOfSource == typeof(Employer)) {
  ...
}

在只有两种类型的简单情况下,是一个超配,但是如果你有一个真正的纠缠的代码是很有用的

您可以尝试as操作符

var otherEmployess = source as IEnumerable<Employee>;
if(otherEmployess != null)
{
        // use otherEmployees
}

你也可以选择IEnumerable<Employee>,但是如果类型不是IEnumerable<Employee>的话会抛出异常