最近在写C#时需要在switch中对不同的错误码进行处理,于是想到使用枚举类型,因为是新手,所以用起来感觉很不方便。之前用java开发时,使用枚举类定义错误码及其含义非常的方便,下文给出两种语言定义错误码及在switch语句使用的代码块,希望能帮到大家:
java
// the definition of ErrorStatus
public enum ErrorStatus {
SUCCESS(200, "Success"),
REDUNDANT_OPERATION(201, "Redundant operation"),
DUPLICATED(4090, "Duplicated"),
FORMAT_ERROR(4150, "Format error");
private int value;
private String errorMessage;
ErrorStatus(int value, String errorMessage) {
this.value = value;
this.errorMessage = errorMessage;
}
public int value() {
return value;
}
public void setValue(int value) {
this.value = value;
}
public String getErrorMessage() {
return errorMessage;
}
public void setErrorMessage(String errorMessage) {
this.errorMessage = errorMessage;
}
public static Boolean isValidateRawType(int level) {
ErrorStatus[] value = ErrorStatus.values();
boolean flag = false;
for (ErrorStatus pl : value){
if(pl.value == level){
flag = true;
}
}
return flag;
}
public static ErrorStatus getByValue(int value){
for(ErrorStatus type: values()){
if(type.value() == value){
return type;
}
}
return null;
}
}
// the usage of ErrorStatus
switch(code){
case ErrorStatus.SUCCESS.value():
log.info(ErrorStatus.SUCCESS.getErrorMessage());
break;
case ErrorStatus.REDUNDANT_OPERATION.value():
log.info(ErrorStatus.REDUNDANT_OPERATION.getErrorMessage());
break;
case ErrorStatus.DUPLICATED.value():
log.info(ErrorStatus.DUPLICATED.getErrorMessage());
break;
case ErrorStatus.FORMAT_ERROR.value():
log.info(ErrorStatus.FORMAT_ERROR.getErrorMessage());
break;
}
C#
使用C#时,可以方便地拿到枚举的value,但很难拿到其对应的message,网上找到很多种方法基本上是定义一个静态方法加上反射的原理,然后返回一个Dictionary, 用起来真心不方便,研究了好久发现了一个包: Enums.NET 操作起来非常简单。
// The definition of ErrorStatus
public enum ErrorStatus
{
[Description("Success")]
SUCCESS = 200,
[Description("Redundant operation")]
REDUNDANT_OPERATION = 201,
[Description("Duplicated")]
DUPLICATED = 4090,
[Description("Format error")]
FORMAT_ERROR = 4150
}
//The usage of ErrorStatus
switch(code){
case (int)ErrorStatus.SUCCESS:
Log.Logging((ErrorStatus.SUCCESS).AsString(EnumFormat.Description));
break;
case (int)ErrorStatus.REDUNDANT_OPERATION:
Log.Logging((ErrorStatus.REDUNDANT_OPERATION).AsString(EnumFormat.Description));
break;
case (int)ErrorStatus.DUPLICATED:
Log.Logging((ErrorStatus.DUPLICATED).AsString(EnumFormat.Description));
break;
case (int)ErrorStatus.FORMAT_ERROR:
Log.Logging((ErrorStatus.FORMAT_ERROR).AsString(EnumFormat.Description));
break;
}
看下来还是java的更简单,也午还有更好的方法,欢迎大神留言指正。