我有一个包含IEnumerable的对象,其中T可以是我在数据模型中拥有的几个类之一。
假设T可以是Employee或Employer。现在有了一个裸对象,知道它肯定持有一个IEnumerable我怎么知道它持有的是哪个类型呢?雇员还是雇主?或者更好的是,我如何将对象强制转换或反射到IEnumerable?
如果我在设置对象时保留类型,它会帮助我将对象强制转换或反射到它最初的样子吗?
如果我保留这些
object source = db.Employees; //IEnumerable<Employee>
type dataType = Employee;
可以强制转换或反射回IEnumerable of Employees吗?
一般情况下可以使用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>
的话会抛出异常