用值初始化泛型类



我有一个通用类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 businessName)
{
_forward.Add(modelName, businessName);
_backward.Add(businessName, modelName);
}

nameMap应该在创建时初始化值,例如(蓝色,红色)用于向前字典,(红色,蓝色)用于向后字典。

我想在这个类中有一个设置函数,例如:

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

但是,由于类是泛型的,所以字符串与泛型类型冲突。

我想了一些方法来解决这个问题:

  1. 传递一个实例化的对象到setUpBusinessNames类型NameMap<字符串,String>
  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 businessName)
{
_forward.Add(modelName, businessName);
_backward.Add(businessName, modelName);
}

public abstract void SetUp();
}
public class NameMapString : NameMap<string, string>
{
public NameMapString () : base() { }
public override void SetUp()
{
Add("blue", "red");
}
}

这将强制该类型。如果您需要另一种类型,只需创建另一个类并执行相同的过程。

相关内容

  • 没有找到相关文章

最新更新