Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 工厂代替开关_C#_.net - Fatal编程技术网

C# 工厂代替开关

C# 工厂代替开关,c#,.net,C#,.net,我有以下方法: Label LabelFactory(string template, object id) { Label label = GetLabelTemplate(template); if (label == null) throw new Exception("Unknown Label type or Label cannot be loaded."); switch (template) { case "BTAC": label.D

我有以下方法:

Label LabelFactory(string template, object id) {
  Label label = GetLabelTemplate(template);
  if (label == null) throw new Exception("Unknown Label type or Label cannot be loaded.");
  switch (template) {
      case "BTAC":
          label.Data = GetDataForLabel<BTAC>(id); break;
      case "KTAC":
          label.Data = GetDataForLabel<KTAC>(id); break;
      ...
  }
  return label;
}
标签LabelFactory(字符串模板,对象id){ 标签标签=GetLabelTemplate(模板); if(label==null)抛出新异常(“未知标签类型或标签无法加载”); 开关(模板){ 案例“BTAC”: label.Data=GetDataForLabel(id);中断; 案例“KTAC”: label.Data=GetDataForLabel(id);中断; ... } 退货标签; } 调用站点不知道类型(BTAC、KTAC等),所以我不得不使用这个模板参数。然而,我不喜欢这个开关。有什么优雅的方法可以替代它吗

欢迎任何想法。

情人眼里出西施;恰好是在您之后阅读代码的任何人。
也就是说;没有优雅的方式,没有

您必须返回并找出哪个类对应于发送的字符串变量模板。
也许有帮助


你到底不喜欢它的什么地方?这里有各种选项,例如
字典
,但如果不知道要求是什么,就很难知道该推荐什么。您可能希望在codereview上交叉发布此内容。stackexchange.com
switch
只是实现factory的一种方法。如果您需要可扩展性,请尝试实现RegisterResolveRelease模式。F.e.您可以使用一个名为“注册/解析”的IOC管理器。