Я закодировал этот метод, чтобы удовлетворить свои потребности. Здесь есть еще три значения case, но я их не включил.

    public static string scoreColumn(int num)
    {
        switch (num)
        {
            case 1: return "English";
            case 2: return "Kanji"; 
        }
        return "";
    }

Может ли кто-нибудь сказать мне, является ли это оптимальным и чистым способом вернуть строку в этом методе. Мне не хватает более очевидного и простого способа достижения той же функциональности?

c#
0
Alan2 26 Ноя 2016 в 08:23

4 ответа

Лучший ответ

Используйте то, что проще в использовании и чтении, и заботьтесь об эффективности только тогда, когда это необходимо.

string[] scoreColumn = { "English", "Kanji" }; 

string result = scoreColumn.ElementAtOrDefault(num - 1);
2
Slai 26 Ноя 2016 в 06:59

В этом случае enum будет лучшим выбором по сравнению с целым числом, а поскольку в ваших описаниях нет пробелов, вы можете просто вывести имя перечисления, используя .ToString().

Если вы хотите стать еще интереснее, вы можете добавить атрибуты к членам перечисления, но для их извлечения потребуется некоторое обманное размышление. Вы можете инкапсулировать этот метод расширения, но он уродлив.

См. http://www.codeducky.org/ins-outs-c-enums/ для некоторых примеров (последний пример использует атрибут, они также показывают подход .ToString ()).

2
PMV 26 Ноя 2016 в 05:34

Для этого вы можете использовать Словарь.

private static readonly Dictionary<int, string> dic = new Dictionary<int, string>
{
    {1,"abc" },
    {2,"efg" },
    //...
};

public static string scoreColumn(int num)
{
    string val;
    if(dic.TryGetValue(num, out val)) return val;
    else return "";
}

Для большего количества случаев словарь будет работать лучше. для небольшого количества случаев использование словаря тоже не должно быть проблемой. Кроме того, со словарем вы можете легче управлять своими делами, как видите.

2
M.kazem Akhgary 26 Ноя 2016 в 05:41

Вместо написания нового метода мне поможет массив строк.

2
hecate 26 Ноя 2016 в 05:26