C# 将elseif块重构为哈希和类
我正在处理旧的asp.net代码(但是它被转换为最新的.net版本),我遇到了一个包含15500长if elseif块的文件(有700个条件)。每个条件都具有相同的结构:C# 将elseif块重构为哈希和类,c#,design-patterns,refactoring,C#,Design Patterns,Refactoring,我正在处理旧的asp.net代码(但是它被转换为最新的.net版本),我遇到了一个包含15500长if elseif块的文件(有700个条件)。每个条件都具有相同的结构: if(a == "aaa") { ..... } else if(a == "bbb") { .... } ..... 我认为它需要重构。我想将每个块中的代码拆分为separe类,将它们命名为“aaa”、“bbb”。。。并使用字典或哈希表存储对它们的引用。它可能有一个带有特定返回类型的execute()方法的接口。问题
if(a == "aaa")
{
.....
}
else if(a == "bbb")
{
....
}
.....
我认为它需要重构。我想将每个块中的代码拆分为separe类,将它们命名为“aaa”、“bbb”。。。并使用字典或哈希表存储对它们的引用。它可能有一个带有特定返回类型的execute()方法的接口。问题是,我认为实例化每个类并将对象存储到哈希表需要一些时间,而且我认为性能越差(对于构造哈希表的每个请求)。它必须总共存储700个对象,然后只检索一个对象。我的问题是:
好吧,如果你不需要实例变量,我建议你使用一个静态类,将它们作为一个单独的函数。然后你可以定义一个兼容的委托方法,并存储对函数本身而不是类的引用。因为它们是在静态上下文中执行的,所以不需要类实例化
加载哈希映射需要一点内存,但在此之后,占用的内存可以忽略不计。我认为性能越差(对于构造哈希表的每个请求)-我真的不认为创建哈希表需要花费任何明显的时间,但请注意,如果哈希表保存在一个静态变量中,它只实例化一次。您可以通过创建一个您打算尝试的模式的小示例,并运行代码来查看它的速度。我们无法预测w您尚未编写的代码将在将来执行!如果您想知道一件事情有多快,请构建它,然后测量它的速度。如果您使用
哈希集
,并使用lambdas对每个可能的键进行初始化,会怎么样?还要注意,如果您使用开关
,则会使用和,尽管这仍然涉及(整数)要验证的哈希比较和字符串比较。请注意,这取决于排列(和编号)对于case
值,编译器可能会执行二进制搜索而不是哈希表查找。@stuard搜索实现特定接口的类,然后自动实例化这些类的对象,将它们添加到哈希表中,这是一个更好的主意吗?或者最好为每个类编写700个case?我假设on不是一个好的实践,但是我会节省很多行。因此我建议使用lambdas-编译器将为您创建类并处理引用。