字典 - 使用类型作为键并将其限制为仅适用于某些类型

Dictionary - using type as key and constraint it to only to certain types

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

public abstract class Base
{ }

public class InheritedObject1 : Base
{ }

public class InheritedObject2 : Base
{ }

public class Program
{
    public Dictionary<Type, string> myDictionary = new Dictionary<Type, string>();
}

因此,例如,根据上面给出的代码,我只想将 Type 限制为:Base 以及从它继承的每个 class。是否可以做这样的约束?

只需创建一个继承自 Dictionary 的模板 class,如下所示:

class CustomDictionary<T> : Dictionary<T, string>
    where T : Base
{
}

然后您可以根据需要在您的代码中使用它:

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

        Dict.Add(new InheritedObject1(), "value1");
        Dict.Add(new InheritedObject1(), "value2");
    }

好吧,如果你这样做了

public Dictionary<Base, string> myDictionary = new Dictionary<Base, string>();

那么只有 Base 及其子项可以用作密钥(在这种特定情况下 Baseabstract,因此只有子项适用)。