Найдите строку в Enum и верните Enum

Во многих случаях Ant является излишним. Просто используйте BAT-файл, если вы находитесь в Windows или сценарии оболочки (sh-файл), если вы находитесь в Linux. Вы можете создать текстовый файл, который включает в себя все ваши команды javac и просто запустить этот файл, когда вы хотите его построить.

Например, я использую следующий файл bat для создания одного из моих приложений:

@echo off
echo Building Shazaam...

del classes\com\aepryus\shazaam\*.* /q
del classes\com\aepryus\shazaam\engine\*.* /q
del classes\com\aepryus\shazaam\domain\*.* /q
del classes\com\aepryus\shazaam\persist\*.* /q
del classes\com\aepryus\shazaam\view\*.* /q
del classes\com\aepryus\shazaam\task\*.* /q
del classes\com\aepryus\shazaam\action\*.* /q
del classes\com\aepryus\shazaam\controller\*.* /q

javac src\com\aepryus\shazaam\*.java        -classpath \lib\AepUtil.jar;\lib\AepXML.jar;\lib\AepLoom.jar; -d classes
javac src\com\aepryus\shazaam\engine\*.java -classpath \lib\AepUtil.jar;\lib\AepXML.jar;\lib\AepLoom.jar;\lib\Sprout.jar;classes; -d classes
javac src\com\aepryus\shazaam\domain\*.java -classpath \lib\AepUtil.jar;\lib\AepLoom.jar;\lib\Sprout.jar;classes; -d classes
javac src\com\aepryus\shazaam\persist\*.java    -classpath \lib\AepUtil.jar;\lib\AepLoom.jar;\lib\Sprout.jar;classes; -d classes
javac src\com\aepryus\shazaam\view\*.java   -classpath \lib\Servlet.jar;\lib\AepUtil.jar;\lib\AepXML.jar;\lib\AepLoom.jar;\lib\AepHTML.jar;\lib\Sprout.jar;classes; -d classes
javac src\com\aepryus\shazaam\task\*.java   -classpath \lib\AepUtil.jar;\lib\AepLoom.jar;\lib\AepHTML.jar;\lib\Sprout.jar;classes; -d classes
javac src\com\aepryus\shazaam\action\*.java -classpath \lib\Servlet.jar;\lib\AepUtil.jar;\lib\AepLoom.jar;\lib\AepHTML.jar;\lib\Sprout.jar;classes; -d classes
javac src\com\aepryus\shazaam\controller\*.java -classpath \lib\Servlet.jar;\lib\AepUtil.jar;\lib\AepXML.jar;\lib\AepRPC.jar;\lib\AepLoom.jar;\lib\AepHTML.jar;\lib\Sprout.jar;classes; -d classes

cd classes
jar cf ..\war\WEB-INF\lib\Shazaam.jar .
cd..

echo Complete
144
задан Matt Clarkson 19 March 2018 в 14:29
поделиться

6 ответов

проверьте System.Enum.Parse:


enum Colors {Red, Green, Blue}

// your code:
Colors color = (Colors)System.Enum.Parse(typeof(Colors), "Green");

360
ответ дан 23 November 2019 в 22:28
поделиться

Вы можете привести int к enum

(MyColour)2

Есть также вариант Enum.Parse

(MyColour)Enum.Parse(typeof(MyColour), "Red")
18
ответ дан 23 November 2019 в 22:28
поделиться

Все, что вам нужно, это Enum.Parse.

5
ответ дан 23 November 2019 в 22:28
поделиться

Вы можете использовать Enum.Parse, чтобы получить значение перечисления из имени. Вы можете перебрать все значения с помощью Enum.GetNames, а можете просто привести int к enum, чтобы получить значение enum из значения int.

Например, так:

public MyColours GetColours(string colour)
{
    foreach (MyColours mc in Enum.GetNames(typeof(MyColours))) {
        if (mc.ToString().Contains(colour)) {
            return mc;
        }
    }
    return MyColours.Red; // Default value
}

или:

public MyColours GetColours(string colour)
{
    return (MyColours)Enum.Parse(typeof(MyColours), colour, true); // true = ignoreCase
}

В последнем случае будет выброшен ArgumentException, если значение не найдено, вы можете перехватить его внутри функции и вернуть значение по умолчанию.

1
ответ дан 23 November 2019 в 22:28
поделиться

Вы также можете ознакомиться с некоторыми предложениями в этом сообщении в блоге: Мой новый маленький друг, Enum

В сообщении описывается способ создания очень простого универсального вспомогательного класса, который позволяет избежать уродливого синтаксиса преобразования, присущего Enum.Parse - вместо этого вы в конечном итоге пишете что-то вроде этого в своем коде:

MyColours colour = Enum<MyColours>.Parse(stringValue); 

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

-1
ответ дан 23 November 2019 в 22:28
поделиться

Как упоминалось в предыдущих ответах, вы можете приводить непосредственно к базовому типу данных (int -> enum type) или разбирать (string -> enum type).

но учтите - для перечислений не существует .TryParse, поэтому вам понадобится блок try/catch вокруг разбора, чтобы отлавливать неудачи.

0
ответ дан 23 November 2019 в 22:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: