我有一个方法如下,这是一个类似工厂的sorta,给定一个字符串类型,我返回一个实现IWorkerJob的具体类型。有没有更好/更清洁的方法来做这个比拥有60个这样的案例的switch语句,可能是某种查找?
private static IWorkerJob GetWorkerJob(string type)
{
switch (type)
{
case WorkerJobType.IMPORT_GOOGLE_JOB:
return new ImportGoogleJob();
case WorkerJobType.IMPORT_XYZ_JOB:
return new ImportXyzJob();
....
default:
return null;
}
}
答案 0 :(得分:0)
您可以将generic method与where T : new()
约束一起使用where T : <interface name>
,您可以阅读有关MSDN文章Constraints on Type Parameters的约束的更多信息
private static IWorkerJob GetWorkerJob<T>() where T:IWorkerJob, new()
{
return new T();
}
答案 1 :(得分:0)
是的,创建一个映射Func
的字典,然后用它来创建实例。
这样的事情:
private static readonly Dictionary<string, Func<IWorkerJob>> workerJobFactories = new Dictionary<string, Func<IWorkerJob>>
{
{WorkerJobType.IMPORT_GOOGLE_JOB, () => new ImportGoogleJob()},
{WorkerJobType.IMPORT_XYZ_JOB, () => new ImportXyzJob()}
...
};
private static IComparable GetWorkerJob(string type)
{
Func<IWorkerJob> factory = null;
if (workerJobFactories.TryGetValue(type, out factory))
{
return factory();
}
return null;
}
另外,我建议您为enum
创建WorkerJobType
,而不是使用字符串。