我有基类User ant两个继承的classe - Employee和ExtEmployee。
class User { ... }
class Employee : User { ... }
class ExtEmployee : User { ... }
例如两个方法 - GetUsers()和GetUsers2()。 GetUsers()返回所有用户。 GetUsers2()具有过滤器并从currentOrganization返回用户。
public User[] GetUsers()
{
Employee[] list1 = GetEmployees();
ExtEmployee[] list2 = GetExtEmployees(); // empty list
var list = list1.OfType<User>().Union(list2).ToArray();
return list;
}
public User[] GetUsers2()
{
Employee[] list1 = GetEmployees();
ExtEmployee[] list2 = GetExtEmployees(); // empty list
var list = list1.OfType<User>().Union(list2).ToArray();
list = list.Where(u => u.OrganizationId == _currentOrganizationId).ToArray();
returt list;
}
public void Main()
{
var employees = GetUsers() as Employee[]; // works fine
var employees2 = GetUsers2() as Employee[]; // employee2 == null
}
我无法将方法GetUsers2()的结果转换为Employee [] - 我得到null值。为什么呢?
答案 0 :(得分:1)
在您的示例中,两行应等于null
。您无法将User[]
数组转换为Employee[]
数组。那些是不同的类型。
但是,您可以使用IEnumerable.Cast<T>()
和IEnumerable.OfType<T>()
方法执行转换:
//will remove `ExtEmployee` objects.
var employees2 = GetUsers2().OfType<Employee>().ToArray();
//will throw InvalidCastException on ExtEmployee objects unless you define cast operator
var employees2 = GetUsers2().Cast<Employee>().ToArray();