簡體   English   中英

用值初始化泛型類

[英]Initialising Generic class with Values

我有一個 NameMap() 的通用類(顯示感興趣的代碼)

public class NameMap<T1, T2>
{
    private Dictionary<T1, T2> _forward = new Dictionary<T1, T2>();
    private Dictionary<T2, T1> _backward = new Dictionary<T2, T1>();

    public void addBidirectional(T1 modelName, T2 bussinessName)
    {
        _forward.Add(modelName, bussinessName);
        _backward.Add(bussinessName, modelName);
    }

nameMap 應該在創建時使用值啟動,例如 (Blue,red) 用於前向字典和 (red, blue) 用於后向字典。

我想在這個類中有一個設置函數,例如:

    public void setUpBusinessNames()
    {
        this.addBidirectional(("blue", "red");
    }

但是,由於類是泛型的,因此字符串與泛型類型發生沖突。

我雖然有一些解決這個問題的方法:

  1. 將實例化對象傳遞到 NameMap<String,String> 類型的 setUpBusinessNames
  2. 可能將名稱映射類限制為字符串?

任何人有一個好方法來做到這一點?

你可以試試這樣:

public void setUpBusinessNames()
{
   (this as NameMap<string,string>).addBidirectional("blue", "red");
}

但是這個對象必須是NameMap<string, string>一個實例。

將泛型類設為abstract類,然后創建另一個繼承它的類,如下所示:

public abstract class NameMap<T1, T2>
{
    private Dictionary<T1, T2> _forward = new Dictionary<T1, T2>();
    
    private Dictionary<T2, T1> _backward = new Dictionary<T2, T1>();
    
    public void Add(T1 modelName, T2 bussinessName)
    {
        _forward.Add(modelName, bussinessName);
        _backward.Add(bussinessName, modelName);
    }
    
    public abstract void SetUp();
}

public class NameMapString : NameMap<string, string>
{
    public NameMapString () : base() { }

    public override void SetUp()
    {
        Add("blue", "red");
    }
}

這將強制執行類型。 如果您需要另一種類型,只需創建另一個類並執行相同的過程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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