标签:c# enum
关于C#的Enum(枚举),以前用过,老觉得有很多的坑。如果Enum中有2个值相同,则会出现一些问题:
1 , enum Platform : int
EnumControl
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace EnumTest.ainy
{
/// <summary>
/// 名字 = 值
/// </summary>
public enum Platform : int{
Apple = 1,
Android = 2,
Windows = 3,
MACOS = 4,
WP = 3 // 此值与Windows的相同 , 在很多情况下只能取到“Windows” , 所以尽量不要取的相同
}
/// <summary>
/// 对枚举类型的操作测试
/// </summary>
public class EnumControl
{
private static EnumControl instance;
public static EnumControl Instance
{
get {
if (EnumControl.instance == null) {
EnumControl.instance = new EnumControl();
}
return EnumControl.instance
;}
private set
{
EnumControl.instance = value
;} }
private readonly Type enumType;
public EnumControl()
{
this.enumType = typeof(Platform);
}
#region
/// <summary>
/// 通过值找到键值
/// 《!important》:如value有多个,给出第一个
/// 例如 : 如参数是3 , 则返回 Windows 而非WP
/// </summary>
/// <param name="i">值</param>
/// <returns></returns>
public string GetEnumKeyByValue(int i)
{
return Enum.GetName(this.enumType, i);
}
/// <summary>
/// 返回所有的键值
/// </summary>
/// <returns></returns>
public string[] GetEnumKeys()
{
return Enum.GetNames(this.enumType);
}
#endregion
#region
/// <summary>
/// 可以是键值可以是值 ,《!importan》 有重复的话 , 返回第一个
/// </summary>
/// <param name="key">WP/3</param>
/// <returns></returns>
public string GetEnumNameKeyByKeyOrValue(string key) {
return Enum.Parse(this.enumType, key).ToString();
}
public int GetEnumValue(string key)
{
return Convert.ToInt32( Enum.Parse(this.enumType , key));
}
/// <summary>
/// 得到所有的
/// keys
/// </summary>
/// <returns></returns>
public Array GetEnumValues()
{
return Enum.GetValues(this.enumType);
}
#endregion
public Type GetEnumType()
{
Type t = Enum.GetUnderlyingType(this.enumType);
return t;
}
public string getChineseName(Platform myEnum) {
string bcStr = string.Empty;
switch (myEnum) {
case Platform.Apple:
bcStr = "苹果";
break;
case Platform.Android:
bcStr = "安卓";
break;
case Platform.Windows:
bcStr = "微软";
break;
case Platform.MACOS:
bcStr = "苹果PC";
break;
//case Platform.WP:
// bcStr = "Window Phone";
// break;
default:
break;
}
return bcStr;
}
public int getValus(Platform myEnum)
{
int bcInt = (int)myEnum;
return bcInt;
}
}
}测试:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using EnumTest.ainy;
namespace EnumTest
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("----{0}", EnumControl.Instance.GetEnumKeyByValue(3));
Console.WriteLine("_________________________________________________");
foreach (var a in EnumControl.Instance.GetEnumKeys()) {
Console.WriteLine("Array --- {0}", a);
}
Console.WriteLine("_________________________________________________");
Console.WriteLine("4-----{0}", EnumControl.Instance.GetEnumNameKeyByKeyOrValue("4"));
Console.WriteLine("3-----{0}", EnumControl.Instance.GetEnumNameKeyByKeyOrValue("3"));
Console.WriteLine("5-----{0}", EnumControl.Instance.GetEnumNameKeyByKeyOrValue("5"));
Console.WriteLine("WP-----{0}", EnumControl.Instance.GetEnumNameKeyByKeyOrValue("WP"));
Console.WriteLine("_________________________________________________");
Console.WriteLine("Apple-----{0}", EnumControl.Instance.GetEnumValue("Apple"));
//没有意义
//Console.WriteLine("-----{0}", EnumControl.Instance.GetEnumValue("2"));
Console.WriteLine("_________________________________________________");
foreach (var a in EnumControl.Instance.GetEnumValues()) {
Console.WriteLine("Array --- {0}", a);
}
Console.WriteLine("_________________________________________________");
Console.WriteLine("BaseType-----{0}", EnumControl.Instance.GetEnumType());
Console.WriteLine("_________________________________________________");
Console.WriteLine("ChineseName-----{0}", EnumControl.Instance.getChineseName( Platform.WP ));
Console.WriteLine("_________________________________________________");
Console.WriteLine(" Platform.Windows Value-----{0}", EnumControl.Instance.getValus(Platform.Windows));
Console.WriteLine(" Platform.WP Value-----{0}", EnumControl.Instance.getValus(Platform.WP));
Console.ReadKey();
}
}
}结果:
因为:Windows和WP的值都为3 , 有的时候只能取到Windows (通过 3 或者 WP找的时候)
看这个,根本就编辑不过:
本文出自 “Better_Power_Wisdom” 博客,请务必保留此出处http://aonaufly.blog.51cto.com/3554853/1736973
标签:c# enum
原文地址:http://aonaufly.blog.51cto.com/3554853/1736973