[英]c# How to implement a collection of generics
我有一个工作人员类,可以处理一组对象。 我需要每个对象都有两个属性,一个具有未知类型,一个必须是数字。
我想使用一个接口,以便可以有多个项目类,这些项目类允许其他属性,但被迫拥有工作人员类所需的PropA和PropB。
这是我到目前为止的代码,在我尝试使用它之前似乎还可以。 即使MyItem实现IItem,也不允许将MyItem列表作为IItem列表传递。 这就是我感到困惑的地方。
同样,如果可能的话,如果在实例化工人类时我不需要传递T,那就更好了,它将知道基于PropA类型的T是什么。
有人可以帮我整理一下吗? 谢谢!
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
}
如果您直接提供接口而不是具体类型,则可以使这项工作有效。 它只是无法为您做隐式转换:
IEnumerable<IItem<string>> items = GetItems().Cast<IItem<string>>();
var worker = new WorkerClass<string>(items);
顺便说一句:您的原始代码实际上可以在C#4中运行,它支持IEnumerable<T>
上的协方差 。 但是以前的C#版本没有,这就是为什么会出现错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.