1

我有一本包含类的字典。但是,我有很多类要添加到字典中,我想删除一长串添加的列表,因为它开始看起来很乱。我正在考虑将所有数据放在一个文件中并将其加载到字典中,但后来我意识到每次我想创建和添加一个新类时,我都必须修改文件。我宁愿必须在我新创建的类中包含一些会自动将其添加到字典中的内容。我什至不确定这是可能的,所以我将不胜感激。

4

2 回答 2

0

使字典成为某个类的静态字段,或使“将类添加到字典”成为静态方法。

然后,您可以使用静态构造函数将每个类添加到字典中:

class ClassDict {
    ...
    public static void AddClass(Type t) {
        ...
    }
}

class Foo {
    static Foo() {
        ClassDict.AddClass(typeof(Foo));
    }
}
于 2012-10-14T17:10:43.343 回答
0

尝试使用反射来动态定位所有需要的类。创建一个Assembly定义类的实例并尝试将它们过滤掉。下面的示例显示了如何找到名称以 . 结尾的所有类Task

var assembly = Assembly.GetExecutingAssembly();
var taskTypes = assembly.GetTypes()
                        .Where(t => t.Name.EndsWith("Task") && t.IsClass);

Dictionary<string, object> instances =
    new Dictionary<string, object>(taskTypes.Count());

foreach (Type classType in taskTypes)
{
    object instance = Activator.CreateInstance(classType);
    instances.Add(classType.Name, instance);
    Console.WriteLine("Registered key {0} with object of type {1})",
                      classType.Name,
                      instance);
}

我已经使用Activator.CreateInstance方法来创建你的类的实例,但在你的情况下这可能是不可能的,这取决于它们是否有无参数的构造函数等。

另一种选择可能是使用一个可用的 IoC 容器,如autofac,但我需要更多关于您的问题的详细信息,然后才能就此提供适当的建议。

于 2012-10-14T17:15:16.023 回答