# 枚举类型与位运算

• 枚举
• 位运算

1、为什么枚举类型是名称与值得组合？有时我只看到键名称，没有看到相对的值。

public enum Options
{
Insert,
Update,
Save,
Delete,
Query
}

public enum Options
{
Insert=0,
Update=1,
Save=2,
Delete=3,
Query=4
}

2、为什么枚举类型是值类型

internal struct Options:System.Enum
{
public const Options Insert = (Options)0;
public const Options Update = (Options)1;
public const Options Save = (Options)2;
public const Options Delete = (Options)3;
public const Options Query = (Options)4;
public int value__;
}

3、操作枚举类型

(1) GetUnderLyingType:返回容纳一个枚举类型的值的基础类型

public enum Options:byte
{
Insert,
Update,
Save,
Delete,
Query
}
var type= Enum.GetUnderlyingType(typeof(Options));

string strs = type.ToString();

(2)GetValues:获取一个数组，该数组的每个元素都包含钙元素的名称和对应的值。

System.Collections.Generic.Dictionary<int,string> opsDic=new     System.Collections.Generic.Dictionary<int,string>();
Options[] ops = (Options[])Enum.GetValues(typeof(Options));
foreach (var o in ops)
{
try
{
}
catch (Exception ex)
{
Console.WriteLine("键值{0}已存在", (int)o);
}
}    

(3)GetNames:返回一组字符串名称数组。

string[] opsNames = Enum.GetNames(typeof(Options));

(4)Parse和TryParse：可以将数值和名称的字符串转换成对应的枚举类型。

Options turnOption = (Options)Enum.Parse(typeof(Options), "Insert");
Options turnOption1 = (Options)Enum.Parse(typeof(Options), "1");
Options tryTurnOption;
Enum.TryParse<Options>("insert", false, out tryTurnOption);

e.m:1 & 0 = 0, 1 | 0 = 1, ~1 = 0

[Flags]
public enum Options
{
None=0,
Insert = 1, //二进制: 0001
Update = 2, //二进制: 0010
Save = 4,   //二进制: 0100
Delete = 8, //二进制: 1000
Query = 16  //二进制:10000
}

Options hasOps = Options.Insert | Options.Update;
string ops = hasOps.ToString();

if ((hasOps & Options.Insert) == Options.Insert)
{
Console.WriteLine("Has {0}", Options.Insert);
}

string[] imgsArr = Regex.Split(imgsArea, ",", RegexOptions.IgnoreCase | RegexOptions.Multiline);   这句话主要看后面：RegexOptions.IgnoreCase | RegexOptions.Multiline，可以表示为：0001|0010=0011，意思也就是需要同时符合两个条件，

：RegexOptions.IgnoreCase不区分大小写匹配 和 RegexOptions.Multiline 多行模式匹配

[Flags]public enum RegexOptions
{
None = 0,
IgnoreCase = 1,
Multiline = 2,
ExplicitCapture = 4,
Compiled = 8,
Singleline = 16,
IgnorePatternWhitespace = 32,
RightToLeft = 64,
ECMAScript = 256,
CultureInvariant = 512,
}

posted @ 2015-04-20 20:57  K战神  阅读(9101)  评论(0编辑  收藏  举报