将对象转换为IEnumerable <t>,我知道T是</t>

时间:2014-05-05 05:29:10

标签: c# .net linq reflection

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

假设T可以是员工或雇主。现在有一个裸露的对象,知道它肯定持有IEnumerable我怎么能说它持有哪种类型?员工还是雇主?或者更好的我如何将对象转换或反映到IEnumerable?

如果我在设置对象时保留类型,它会帮助我将对象投射或反射到最初的对象上吗?

如果我保留这些

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

我可以投射或反映回IEnumerable of Employees吗?

2 个答案:

答案 0 :(得分:2)

一般情况下,您可以使用 Reflection

Type typeOfSource = source.GetType().GetGenericArguments()[0];

if (typeOfSource == typeof(Employee)) {
  ...
}
else if (typeOfSource == typeof(Employer)) {
  ...
}

在一个简单的情况下过冲只有两种类型,但如果你有一个真正的纠缠码,可以有用

答案 1 :(得分:0)

您可以尝试as运算符

var otherEmployess = source as IEnumerable<Employee>;

if(otherEmployess != null)
{
        // use otherEmployees
}

或者你可以对IEnumerable<Employee>提出异议,但如果类型不是IEnumerable<Employee>

,则会引发异常