因自己犯傻 記錯泛行方式
所以做個紀錄
建立兩個範例
enum enumRemoteCommand
{
[Description("REMOTE")]
REMOTE = 1,
[Description("LOCAL")]
LOCAL = 2,
[Description("Offline")]
Offline = 3,
Length,
}
public enum enumCEID
{
[Description("Equipment Status Change")]
EquipmentStatusChange = 1,
[Description("Procss Program Modify")]
ProcssProgramModify = 2,
[Description("Panel Process Start")]
PanelProcessStart = 3,
[Description("Panel Process End")]
PanelProcessEnd = 4,
Length,
}
建立方法
/// <summary>
/// 抓取現有字串在emun第幾個數值
/// </summary>
/// <param name="stTemp"></param>
public int iGetEnumNum<T>(string stTemp) where T : Enum
{
int i = 0;
foreach (T en in Enum.GetValues(typeof(T)))
{
FieldInfo fi = en.GetType().GetField(en.ToString());
i++;//初始值1開始所以先++
if (fi == null)
return 0;
object[] ob = fi.GetCustomAttributes(typeof(DescriptionAttribute), true);
if (ob != null && ob.Length > 0 && ((DescriptionAttribute)ob[0]).Description.ToUpper()
== stTemp.ToUpper()) return i;
}
return 0;
}
/// <summary>
/// 找到欄位名稱
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="value"></param>
/// <returns></returns>
public string GetEmunDescription<T>(string value) where T : Enum
{
Type type = typeof(T);
var name = Enum.GetNames(type)
.Where(f => f.Equals(value, StringComparison.CurrentCultureIgnoreCase))
.Select(d => d)
.FirstOrDefault();
//// 找無相對應的列舉
if (name == null)
{
return string.Empty;
}
//// 利用反射找出相對應的欄位
var field = type.GetField(name);
//// 取得欄位設定DescriptionAttribute的值
var customAttribute = field.GetCustomAttributes(typeof(DescriptionAttribute), false);
//// 無設定Description Attribute, 回傳Enum欄位名稱
if (customAttribute == null || customAttribute.Length == 0)
{
return name;
}
//// 回傳Description Attribute的設定
return ((DescriptionAttribute)customAttribute[0]).Description;
}
使用方法
private void button1_Click(object sender, EventArgs e)
{
int i= iGetEnumNum<enumRemoteCommand>("REMOTE");
string ss= GetCEIDDescription<enumRemoteCommand>("REMOTE");
string ss2 = GetCEIDDescription<enumCEID>(enumCEID.CurrentRecipeReport.ToString());
Console.WriteLine(i +" "+ss+ " "+ss2);
}
沒有留言:
張貼留言