[英]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.