C# 字典-使用类型作为键,并将其约束为仅限于某些类型

C# 字典-使用类型作为键,并将其约束为仅限于某些类型,c#,generics,dictionary,C#,Generics,Dictionary,如果我们使用类型作为字典的键,是否可以将该类型仅约束到特定的类型?例如: public abstract class Base { } public class InheritedObject1 : Base { } public class InheritedObject2 : Base { } public class Program { public Dictionary<Type, string> myDictionary = new Dictionary<

如果我们使用类型作为字典的键,是否可以将该类型仅约束到特定的类型?例如:

public abstract class Base
{ }

public class InheritedObject1 : Base
{ }

public class InheritedObject2 : Base
{ }

public class Program
{
    public Dictionary<Type, string> myDictionary = new Dictionary<Type, string>();
}
公共抽象类基类
{ }
公共类继承对象1:基
{ }
公共类继承对象2:基
{ }
公共课程
{
公共字典myDictionary=新字典();
}

例如,根据上面给出的代码,我只想将类型约束为:Base和从中继承的每个类。是否可以进行这样的约束?

只需创建一个从
字典继承的模板类,如下所示:

class CustomDictionary<T> : Dictionary<T, string>
    where T : Base
{
}
class自定义字典:字典
其中T:Base
{
}
然后,您可以根据需要在代码中使用它:

    public void Test()
    {
        CustomDictionary<InheritedObject1> Dict = new CustomDictionary<InheritedObject1>();

        Dict.Add(new InheritedObject1(), "value1");
        Dict.Add(new InheritedObject1(), "value2");
    }
公共无效测试()
{
CustomDictionary Dict=新建CustomDictionary();
Dict.Add(新的继承对象1(),“值1”);
Dict.Add(新的继承对象1(),“值2”);
}
如果你这样做了

public Dictionary<Base, string> myDictionary = new Dictionary<Base, string>();
公共字典myDictionary=新字典();

然后,只有
Base
及其子项可以用作键(在这种特定情况下,
Base
抽象的
,因此只有子项适用)。

这是不同的。在问题中,
类型的实例
用作键,而在您的回答中,
Base
类型或其派生的任何实例都可以用作键。问题是只允许特定类型作为字典中的键,而不允许该类型的实例。@Maarten给出了一个例子,我认为这只是关于所使用的单词
type
的错误交流。