Добавить элемент в общую наблюдаемую коллекцию - PullRequest
0 голосов
/ 14 января 2019

Мне нужен метод с универсальным типом возврата ObservableCollection. В этом методе ObservableCollection будет заполняться такими объектами, как сотрудники, контракты или праздничные дни, что когда-либо потребуется в данный момент. Так что это может быть список сотрудников, либо контракты, либо праздники. Все это классы с разными свойствами. Следующий код дает мне ошибку, что Сотрудник не может быть преобразован в T. Что еще мне нужно сделать?

public static ObservableCollection<T> getList<T>()
{
    ObservableCollection<T> result = new ObservableCollection<T>();

    Common.Employee employee = new Common.Employee();
    result.Add(employee);

    return result;
}

Ответы [ 2 ]

0 голосов
/ 14 января 2019

Если у вас есть универсальный метод, вы не должны инициализировать конкретную реализацию объекта внутри него. Лучше было бы, чтобы вызывающая сторона передавала параметр типа универсального объекта, а затем добавляла его в коллекцию.

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;
}
0 голосов
/ 14 января 2019

Одним из возможных решений было бы определение пустого интерфейса, например. 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. Почему в универсальном методе мы должны создать экземпляр определенного объекта, а затем добавить его в список и вернуть этот список? Какова цель для этого?

...