使用内部开关盒有什么好的替代结构吗?

时间:2015-06-13 14:58:30

标签: c#

我有切换案例在我的程序中显示文本。我想知道我可以使用字典或枚举数字和文本吗?或者这样使用开关盒是否合适?

string result;
int number = int.Parse(Console.Readline());
switch (number)
{
    case 1:
        result += "ten";
        break;
    case 2:
        result += "twenty";
        break;
    case 3:
        result += "thirty";
        break;
    case 4:
        result += "fourty";
        break;
     case 5:
        result += "fifty";
        break;
     case 6:
        result += "sixty";
        break;
     case 7:
        result += "seventy";
        break;
     case 8:
        result += "eighty";
        break;
     case 9:
        result += "ninety";
        break;
     default:
        result += "";
        break;
}

2 个答案:

答案 0 :(得分:2)

在这种情况下使用Dictionary{int,string}可能不那么冗长:

var dictionary = new Dictionary<int, string>(9)
{
    {1, "ten"},
    {2, "twenty"},
    {3, "thirty"},
    {4, "fourty"},
    {5, "fifty"},
    {6, "sixty"},
    {7, "seventy"},
    {8, "eighty"},
    {9, "ninety"},
};
string dictionaryEntry;
if (dictionary.TryGetValue(number, out dictionaryEntry))
{
    result += dictionaryEntry;
}

此外,如果您打算进行大量字符串连接,请考虑使用StringBuilder而不是result的字符串。

  

对于执行大量字符串操作的例程(例如在循环中多次修改字符串的应用程序),重复修改字符串会严重影响性能。另一种方法是使用StringBuilder,它是一个可变的字符串类。

答案 1 :(得分:1)

这可能听起来有点原始,但是如果你知道字符串将是连续的顺序,为什么不使用字符串数组呢?

string[] array = new string[] { "ten",
                                "twenty",
                                "thirty",
                                ...
                                };

...

result += array[number-1];