公司專案用到列舉封裝的幫助類,加上列舉確實很方便直觀,管理一些特定值,但有時候就是想知道具體列舉值,如果用傳統if else或是swtich就太low,這裡採用更優雅,逼格更高的一種方式,直接獲取列舉,或是列舉值等等,甚至可以獲取列舉上面特性描述字串等等
關鍵點:
第一:可以給列舉擴充套件方法,獲取特性,靜態類,靜態方法,通過列舉type獲取fieldinfo,來獲取上面的特性例項
第二: 通過特定列舉獲取對應列舉值,或是通過對應列舉值獲取列舉enum.getvalues()還有方法enum.format(enumtype,enum,format)
第三:通過描述獲取列舉值,呼叫以上方法
using system;
using system.collections.generic;
using system.componentmodel;
using system.linq;
using system.reflection;
using system.text;
using system.threading.tasks;
namespace testattributeenum
}public enum statusenum
public class remarkattribute : attribute
public remarkattribute(string remark)
}//給列舉增加乙個擴充套件方法,
public static class enumextension
descriptionattribute descriptionattribute=(descriptionattribute)fieldinfo.getcustomattributes(typeof(descriptionattribute), false)[0];
return descriptionattribute?.description ?? string.empty;
}public static string getremark(this statusenum statusenum)
remarkattribute remarkattribute = (remarkattribute)fieldinfo.getcustomattributes(typeof(remarkattribute), false)[0];
return remarkattribute?._remark ?? string.empty;
}//從給定的列舉型別type中,通過列舉描述找到對應的列舉值,
public static enum getenumbydescription(type enumtype,string description)
array values = enum.getvalues(enumtype);
foreach (statusenum item in values)
}return null;
}//獲取給定列舉型別所有的int值的和
public static int getenumsum(type enumtype)
return defaultvalue;
}/// /// 根據傳入的int返回對應列舉屬性名稱
///
///
/// 進製
///
public static string getenumname(int value)
/// /// 根據傳入的列舉屬性獲得對應值
///
///
///
///
public static int getenumvalue(string value)
}}
參考 C 中的列舉及相關例項
長遠來看,建立列舉可以節省大量的時間,減少許多麻煩。使用列舉比使用無格式的整數至少有如下三個優勢 列舉可以使 更易於維護,有助於確保給變數指定合法的 期望的值。列舉使 更清晰,允許用描述性的名稱表示整數值,而不是用含義模糊的數來表示。列舉使 更易於鍵入。在給列舉型別的例項賦值時,vs.net ide...
LINQ系列 C 中與LINQ相關特性
1.匿名型別 通過關鍵字var定義匿名型別,編譯器將根據運算子右側表示式的值來發出乙個強型別。使用匿名型別時要遵守的一些基本規則 匿名型別必須有乙個初始化值,而且這個值不能是空值 null 因為型別是根據初始化器推斷出來的 匿名型別可以用於簡單型別,也可以用於複雜型別。用於定義簡單型別時,其價值不大...
迴圈語句及字串的特性與應用
1.迴圈語句 c語言 sum 0 for int i 1 i 100 i sum sum i 0 1 2 3 100 此演算法求的是1加到100的總和 python sum 0 for i in range 1,101 i 1,2,3.100 sum sum i print sum python求前...