Лучше всего будет и класс, и перечисление. Тогда у вас может быть больше описательных идентификаторов, чем «201».
Структура также будет работать, но их сложнее правильно реализовать, поэтому вам следует придерживаться класса, если вам по какой-то причине не нужна определенная структура.
Вам не нужно хранить ссылку на сообщение в классе, вы можете получить это при необходимости в свойстве Message
. switch
реализован с использованием хеш-таблицы (если существует пять или более значений), поэтому поиск выполняется очень быстро.
public enum ReturnIdentifier {
Success = 100,
MissingName = 201;
}
public class ReturnCode {
public ReturnIdentifier Code { get; private set; }
public ReturnCode(ReturnIdentifier code) {
Code = code;
}
public string Message {
get {
switch (Code) {
case ReturnIdentifier.Success:
return "Request completed successfuly.";
case ReturnIdentifier.MissingName:
return "Missing name in request.";
default:
return "Unexpected failure, please email for support.";
}
}
}
}
Использование:
ReturnCode code = new ReturnCode(ReturnIdentifier.Success);
Если вы откуда-то получили целочисленный код, вы все равно можете использовать его, поскольку значения перечислителя соответствуют кодам:
int error = 201;
ReturnCode code = new ReturnCode((ReturnIdentifier)error);
(Если целочисленный код не соответствует ни одному из идентификаторов в перечислении, преобразование все равно вполне допустимо. При получении значения Message
оно заканчивается в случае default
как значение не соответствует ни одному из других случаев.)