C#里面的枚举与位或运算符 一个枚举变量存入多个值
以前我们如果定义一个枚举类型 ,然后定义一个枚举变量,那么这个枚举变量只能为类型中的一个值,现在我们想要一个变量能够代表多个值:
今天看《Pro Net 2.0 Windows Forms And Custom Cortrols In C#》时看到枚举一节,发现了在一个枚举里面需要合并多个值,看到了用到了”|”运算符,原来没怎么注意,今天想了一下为什么用”|”呢?
在MSDN里面看到了这样一句话:“用2的幂(即 1、2、4、8 等)定义枚举常量。这意味着组合的枚举常量中的各个标志都不重叠。”
于是写了一个例子:

[FlagsAttribute] 加上他枚举变量才能进行位或操作
enum Colors_1
{
Red = 1, Green = 2, Blue = 4, Yellow = 8
};
//测试
private void button1_Click(object sender, EventArgs e)
{
Colors_1 color_1 = Colors_1.Red | Colors_1.Green | Colors_1.Blue
| Colors_1.Yellow;
string strResult = color_1.ToString() + " " + ((int)color_1)
.ToString();
MessageBox.Show(strResult);
}

输出结果:
咦! 1 + 2 + 4 + 8 = 15 刚刚等于15,难道这是巧合?
全部显示出来了,安逸!
再写个例子试试:

[FlagsAttribute]
enum Colors_2
{
Red = 1, Green = 2, Blue = 3, Yellow = 4
};
//测试
private void button1_Click(object sender, EventArgs e)
{
Colors_2 color_2 = Colors_2.Red | Colors_2.Green | Colors_2.Blue
| Colors_2.Yellow;
string strResult = color_2.ToString() + " " + ((int)color_2).ToString();
MessageBox.Show(strResult);
}

输出结果:
晕,怎么没把颜色全部显示出来呀?
咦!3 + 4 = 7 刚好显示枚举值为3,4的两种颜色
再写一个例子呢?

//测试
private void button1_Click(object sender, EventArgs e)
{
Colors_1 c = (Colors_1)Enum.Parse(typeof(Colors_1), "7");
MessageBox.Show(c.ToString() + " " + ((int)c).ToString());
}

输出结果:
居然会自动转换成相应的枚举值,厉害!
再来我加个枚举为7的值:

[FlagsAttribute]
enum Colors_1
{
Red = 1, Green = 2, Blue = 4, Yellow = 8, Seven = 7
};
//测试
private void button1_Click(object sender, EventArgs e)
{
Colors_1 c = (Colors_1)Enum.Parse(typeof(Colors_1), "7");
MessageBox.Show(c.ToString() + " " + ((int)c).ToString());
}

输出结果:
印证了MSDN那句话,只有将枚举值设置为0,2,4,8…..这样的只才会叠加,枚举会自动判断当前值,如果枚举里面有这个值当然就显示这个值了;如果没有就做匹配用加法看看那几个数加起来刚好是这个枚举值,但如果有几个数字加起来都等于这个值怎么办呢?还没遇到呢,目前这是我的理解,希望大牛些指教!
运用:::::
[Flags] //注意标志
public enum myColor
{
None=0, Red=1,Green=2,Blue=4,Yellow=8
};
private void Form1_MouseClick(object sender, MouseEventArgs e)
{
myColor my=myColor.None;
//添加
if(红色)
my=my|myColor.Red;
if(绿色)
my=my|myColor.Red;
........
//提取
if(my&myColor.None=myColor.None)?ture:false;
if(my&myColor.None=myColor.Red)?ture:false;
string nnn = mmm.ToString();
MessageBox.Show(nnn);
}
C#里面的枚举与位或运算符 一个枚举变量存入多个值的更多相关文章
- 【&】位与运算符【|】位或运算符之权限控制算法
[&]位与运算符: 按位与运算符"&"是双目运算符. 其功能是参与运算的两数各对应的二进位相与.只有对应的两个二进位均为1时,结果位才为1 ,否则为0.参与运算的数 ...
- 《Python CookBook2》 第一章 文本 - 每次处理一个字符 && 字符和字符值之间的转换
文本 - 总结: 什么是文本Python 中的string 类型是不可变类型.文本,一个字符的矩阵,每一个单独的文本快可以被缩进和组织起来. 基本的文本操作①解析数据并将数据放入程序内部的结构中:②将 ...
- SQL查询一个表里面某个字段值相同的数据记录
好长时间没有用SQL了...还停留在学生时代的水平... 转: 昨天遇到个面试题:查询一个表里面某个字段值相同的数据记录,好久没有写过这种,还真的花了点时间才写出来.如表g_carddetail,有 ...
- Python enum 枚举 判断 key(键) 或者 value(值)是否在枚举中
Python enum 枚举 判断 key(键) 或者 value(值)是否在枚举中 python 的基本用法请浏览:https://www.cnblogs.com/ibingshan/p/98564 ...
- 3、输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
题目描述 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList. 思路: 利用栈“先进后出”的性质,将链表的值存入到栈里,然后将栈里的值存入到构建好的容器里,最后打印容器. class So ...
- 实现一个键对应多个值的字典(multidict)
一个字典就是一个键对应一个单值的映射.如果你想要一个键映射多个值,那么你就需要将这多个值放到另外的容器中, 比如列表或者集合里面.比如,你可以像下面这样构造这样的字典: d = { , , ], , ...
- [Jmeter]Xpath获取元素某个属性的值,以及获取最后一个元素某个属性的值
XPath获取元素某个属性的值 XPath query: clients/attribute::total XPath获取最后一个元素某个属性的值 XPath query: /clients/c ...
- 【mybatis】mybatis执行一个update方法,返回值为1,但是数据库中数据并未更新,粘贴sql语句直接在数据库执行,等待好久报错:Lock wait timeout exceeded; try restarting transaction
今天使用mybatis和jpa的过程中,发现这样一个问题: mybatis执行一个update方法,返回值为1,但是数据库中数据并未更新,粘贴sql语句直接在数据库执行,等待好久报错:Lock wai ...
- ssas 为绑定指定的大小太小,导致一个或多个列值被截断
错误信息:ssas 为绑定指定的大小太小,导致一个或多个列值被截断 如果更改了某个维度或是事实表的字段长度,在处理CUBE时提示此错误,我们要做以下更新: 1.刷新数据源视图. 2.打开多维数据集,查 ...
随机推荐
- build path libraries java基础--Jar包添加到build path方式说明--01
摘自: http://blog.csdn.net/haolongabc/article/details/7007701 java基础--Jar包添加到build path方式说明--01 前言:这段短 ...
- PyDev:warning: Debugger speedups using cython not foun
在eclipse下调试代码开始时总提示一个警告: warning: Debugger speedups using cython not found. Run '"C:\Python36\p ...
- Thinkphp学习笔记5-URL生成U方法
为了配合所使用的URL模式,我们需要能够动态的根据当前的URL设置生成对应的URL地址,为此,ThinkPHP内置提供了U方法,用于URL的动态生成,可以确保项目在移植过程中不受环境的影响. 定义规则 ...
- 转:修改Android签名证书keystore的密码、别名alias以及别名密码
转自:http://blog.k-res.net/archives/1671.html 二月 5, 2014 | Posted by K-Res 之前在测试Eclipse ADT的Custom ...
- TeamTalk 5
TeamTalk 5 Repository for TeamTalk 5 development. Download TeamTalk 5 SDK To build the TeamTalk clie ...
- Graph Automata Player
题目action=problem&type=show&id=12839&courseid=269">here 第一道高速幂.同一时候也是第一道高斯消元. 输入的 ...
- Unity3D Android播放视频
http://blog.csdn.net/awnuxcvbn/article/details/17719789 using UnityEngine; using System.Collections; ...
- excel 永久保存宏命令
excel 永久保存宏命令 CreateTime--2018年5月31日10:03:44 Author:Marydon 情形一:下次编辑excel时,仍可使用 Ctrl+s-->选择否,选择 ...
- 〖Linux〗不知谁写的,很实用的Linux命令
第一部分 . sudo 运行上一条命令 sudo !! . HTTP方式共享当前目录 python -m SimpleHTTPServer . vim保存一个root用户文件 :w !sudo tee ...
- JDBC 增删改查代码 过滤查询语句
package test; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; i ...