У меня есть рабочий класс, который работает с коллекцией объектов. Мне нужно, чтобы каждый из этих объектов имел два свойства, одно имеет неизвестный тип, а другое должно быть числом.
Я хотел использовать интерфейс, чтобы у меня было несколько классов элементов, которые допускали другие свойства, но были вынуждены иметь PropA и PropB, которые требуются рабочему классу.
Это код, который у меня до сих пор, который, казалось, был в порядке, пока я не попытался его использовать. Список MyItem не может быть передан как список IItem, хотя MyItem реализует IItem. Вот где я запутался.
Также, если это возможно, было бы замечательно, если бы при создании экземпляра рабочего класса мне не нужно было передавать значение T, вместо этого он знал бы, что основано на типе PropA.
Может ли кто-нибудь помочь мне разобраться?
Спасибо!
public interface IItem<T>
{
T PropA { get; set; }
decimal PropB { get; set; }
}
public class MyItem : IItem<string>
{
public string PropA { get; set; }
public decimal PropB { get; set; }
}
public class WorkerClass<T>
{
private List<T> _list;
public WorkerClass(IEnumerable<IItem<T>> items)
{
doStuff(items);
}
public T ReturnAnItem()
{
return _list[0];
}
private void doStuff(IEnumerable<IItem<T>> items)
{
foreach (IItem<T> item in items)
{
_list.Add(item.PropA);
}
}
}
public void usage()
{
IEnumerable<MyItem> list= GetItems();
var worker = new WorkerClass<string>(list);//Not Allowed
}