字典 - 使用类型作为键并将其限制为仅适用于某些类型
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
及其子项可以用作密钥(在这种特定情况下 Base
是 abstract
,因此只有子项适用)。
如果我们使用类型作为字典的键,是否可以将该类型限制为特定类型?例如:
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
及其子项可以用作密钥(在这种特定情况下 Base
是 abstract
,因此只有子项适用)。