更好地使用HashTable或switch case

我不确定哪一个更好。 我需要解析输入字符串的每个字符并获取字符的替换字符串。 对于某些对象,允许使用所有字母数字字符,因此使用switch / case会导致大量代码并降低可读性和可维护性,但我可以使用静态方法。 使用HashTable也需要大量代码

使用静态方法:

private static string EncodeChar(char c) { var symbols = string.Empty; switch (c) { case '0': symbols = "Test"; break; case '1': symbols = "Hello"; break; [...] } symbols; } 

使用HashTable:

 private static Hashtable table = CreateTable(); private static Hashtable CreateTable() { var table = new HashTable(); table.Add('0',"Test"); table.Add('1', "Hello"); [...] return table; } private static string EncodeChar(char c) { return table.ContainsKey(c) ? table[c].ToString() : string.Empty; } 

编码方法:

 public void Encode() { string output = string.Empty; for (int i = 1; i < Data.Length; i++) { output = string.Concat(output, EncodeChar(Data[i])); } EncodedData = output; } 

有关性能和内存分配的优点/缺点是什么?

我使用HashTable ,因为代码更具可读性和可维护性:您可能有一天决定从XML文件加载子代码字符串,这样您就不会更改代码来更改映射。

哈希更快,因为您可以直接访问’编码字符串’

例如,如果假设所有字符都是’9’,那么每次处理字符时, if conditions在执行正确的statement之前,则必须评估8。

这只是使用switch()时最糟糕的例子

切换代码与替代方案做同样的事情,但它更具可读性,应该是这里的主要关注点。

然而,我会使用一个抽象工厂来获取不同类型输入的许多不同编码实现之一。