考虑以下代码:
namespace TestNameSpace {
public interface IFinder
{
IEnumerable<T> GetData<T>(DataStore dataStore);
}
public class EmployeeFinder : IFinder {
public IEnumerable<Employee> GetData<Employee>(DataStore dataStore) {
return dataStore.Employees; //*****This causes an error*****
}
}
public class DataStore {
public IEnumerable<Employee> Employees { get; set;}
}
public class Employee {
}
}
我返回 dataStore.Employees 的行导致编译错误。
Cannot implicitly convert type 'System.Collections.Generic.IEnumerable<TestNameSpace.Employee>' to 'System.Collections.Generic.IEnumerable<Employee>'. An explicit conversion exists (are you missing a cast?)
为什么相同类型时需要隐式转换?为什么一个有命名空间而另一个没有?
谢谢!
最佳答案
您已经使用了Employee
作为方法通用参数的名称,因此 Employee
有两种不同的含义在您的代码中。
namespace TestNameSpace {
public interface IFinder
{
IEnumerable<T> GetData<T>(DataStore dataStore);
}
public class EmployeeFinder : IFinder {
public IEnumerable<EmployeeGenericParameter> GetData<EmployeeGenericParameter>(DataStore dataStore) {
return dataStore.Employees;
}
}
public class DataStore {
public IEnumerable<EmployeeClass> Employees { get; set;}
}
public class EmployeeClass {
}
}
和IEnumerable<EmployeeClass>
无法转换为 IEnumerable<EmployeeGenericParameter>
作为EmployeeGenericParameter
可以是int
或其他任何内容。
关于c# - 无法将 IEnumerable<T> 的类型隐式转换为 IEnumerable<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30293998/