我想要一个具有通用ObservableCollection返回类型的方法。 在这种方法中,ObservableCollection将充满员工,合同或假期之类的对象,这是目前需要的。因此它可以是员工列表,合同或假期。所有都是具有不同属性的类。 以下代码给我一个错误,那就是Employee无法转换为T。我还必须做什么?
public static ObservableCollection<T> getList<T>()
{
ObservableCollection<T> result = new ObservableCollection<T>();
Common.Employee employee = new Common.Employee();
result.Add(employee);
return result;
}
答案 0 :(得分:0)
一种可能的解决方案是定义一个空接口,例如IEntity
并声明Employee
类实现了此接口:
interface IEntity
{
}
class Employee : IEntity
{
}
然后,您应该在签名方法中要求T
实现IEntity
并更改为局部变量employee
声明的类型:
public static ObservableCollection<T> GetList<T>() where T : IEntity
{
ObservableCollection<T> result = new ObservableCollection<T>();
IEntity employee = new Common.Employee();
result.Add(employee);
return result;
}
尽管事实,但上述方法将解决编译错误,但我没有实现GetList
方法。为什么在通用方法中,我们必须创建特定对象的实例,然后将其添加到列表中并返回此列表?这样做的目的是什么?
答案 1 :(得分:0)
如果具有通用方法,则不应在其内部初始化对象的特定实现。更好的选择是让调用者传递通用对象类型的参数,然后将其添加到集合中。
public static ObservableCollection<T> getList<T>(T observableItem)
{
ObservableCollection<T> result = new ObservableCollection<T>();
result.Add(observableItem);
return result;
}
或者,您可以在方法中创建T的新实例。
public static ObservableCollection<T> getList<T>() where T : new()
{
ObservableCollection<T> result = new ObservableCollection<T>();
T observableItem = new T();
result.Add(observableItem);
return result;
}