簡體   English   中英

C#如何實現泛型集合

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM