我有一個 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");
}
但是,由于類是泛型的,因此字串與泛型型別發生沖突。
我雖然有一些解決這個問題的方法:
- 將實體化物件傳遞到 NameMap<String,String> 型別的 setUpBusinessNames
- 可能將名稱映射類限制為字串?
任何人有一個好方法來做到這一點?
uj5u.com熱心網友回復:
你可以試試這樣:
public void setUpBusinessNames()
{
(this as NameMap<string,string>).addBidirectional("blue", "red");
}
但是這個物件必須是 的一個實體NameMap<string, string>。
uj5u.com熱心網友回復:
創建泛型類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");
}
}
這將強制執行型別。如果您需要另一種型別,只需創建另一個類并執行相同的程序。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/335831.html
上一篇:1.PE檔案之DOS頭(IMAGE_DOS_HEADER)
下一篇:密封類泛型
