【发布时间】:2019-02-23 14:52:48
【问题描述】:
我想创建一个存储类类型属性的 C# 结构,以后可以实例化该属性。
我创建了这样的结构:
internal struct Command<T>
{
internal string trigger;
internal T clazz;
internal string category;
}
然后我想将这些命令结构存储在字典中:
private Dictionary<string, Command> _commandMap;
如何定义 dict 以便为 Command 正确设置其值类型?还是我的整个方法都错了?
【问题讨论】:
-
您是否尝试在字典中存储多种不同类型的命令,例如
Command<string>和Command<int>?如果是这样,你肯定会遇到问题。 (我也强烈建议保持字段私有,使用属性,以及使结构不可变。) -
@JonSkeet 命令不应该是 int 或 string 这样的类型,而是类类型(例如 MyCustomCommandClass)。
-
好吧,字符串也是一个类......听起来你可能想要对
T进行约束。但回到字典 - 你希望能够在同一个字典中存储Command<MyCustomCommandClass1>和Command<MyCustomCommandClass2>吗?如果您能给我们提供更多背景信息,我们会更容易为您提供帮助。 -
@JonSkeet 是的,可以有不同的命令类,但它们都实现了某个接口,例如命令。对不起,缺乏上下文!在尝试从一些旧的 AS3 代码中移植它时,我仍在脑海中弄清楚整个逻辑)。
-
@JonSkeet 这可以通过协变通用接口来完成,例如
ICommand<out T> where T: someKnownBaseType?不幸的是,我对这个主题还不够熟悉,但这听起来像是正确的用例。
标签: c# dictionary generics