巩固hb插件安装方法。
HBuilder中运行Uniapp项目编译出错,说是缺少less样式的编译器,根据提示打开https://ext.dcloud.net.cn/plugin?name=compile-less 下载hb的插件,解压到hb安装目录的中的plugins目录,进入编译less的插件目录,地址栏输入cmd,运行执行npm install命令,然后重启hb即可。 2023年6月16日16:36:08
c#中使用枚举配合位运算符进行权限加减和判断的操作
// 加法
Colors_1 color_1 = Colors_1.Red | Colors_1.Green | Colors_1.Blue | Colors_1.Yellow; // 1+2+4+8 得到15
Colors_1 c1 = Colors_1.Red | Colors_1.Green ; // 1 + 2 得到3
Colors_1 c2 = color_1 | Colors_1.Red; // 15 + 1 还是等于15
Colors_1 c3 = color_1 | Colors_1.Red | Colors_1.Blue; // 15 + 1 +3 还是等于15
// 减法
Colors_1 c4 = color_1 & Colors_1.Red; // 15 - 1 = 1 相当于只提取其中存在的 红色 ,得到 1。此时c4调试查看值为red
Colors_1 c5 = c1 & Colors_1.Blue; // 从 红绿中提取 其中不存在的蓝,结果等于0 (此时0有了枚举)
Colors_1 c6 = color_1 & ~Colors_1.Red; // 从红绿蓝黄中去掉红色, 15-1=14
Colors_1 c7 = c1 & ~Colors_1.Blue; // 从红绿中去掉蓝色,从中去掉不存在的蓝色,结果保存不变仍是3(红绿)
// 判断
bool pand1 = (c1 & Colors_1.Green) == Colors_1.Green; // 判断红绿中是否存在绿,先提取其中的绿,再拿结果和绿继续比较。绿等于绿,结果true
bool pand2 = (c1 & Colors_1.Green) == Colors_1.Blue; // 判断红绿中是否存在绿,先提取其中的绿,再拿结果和蓝继续比较。绿不等于蓝,结果false
bool pand3 = (c1 & Colors_1.Blue) == Colors_1.Green; // 判断红绿中是否存在蓝,先提取其中的蓝,再拿结果和绿继续比较。none不等于绿,结果false
// 故,得出结论,1 2 4 8 是平行关系,可以对应着增删改查,进行权限的加法和减法以及判断是否具备某个权限。而0 比较特殊。
// bool pand4 = (c1 & Colors_1.Blue) == Colors_1.Green; 左思右想,最大权限,还是一个直接把1248相加,多的再叠加就好。而最小权限,也是应该只有1或者只有2。总之就是只有勾选就好了。0在权限里面,感觉不应该保存下来。
// 转换
Colors_1 cp1 = (Colors_1)Enum.Parse(typeof(Colors_1), "2"); // 数值转枚举,结果值为green。如果此数值存在,则返回对应枚举。
Colors_1 cp2 = (Colors_1)Enum.Parse(typeof(Colors_1), "6"); // 数值转枚举,结果值为6。此数值不存在于此枚举中,但是该变量值仍旧为6。
Colors_1 cp3 = (Colors_1)Enum.Parse(typeof(Colors_1), "3");// 数值转枚举,结果值为3。此数值不存在于此枚举中,但是该变量值仍旧为3。(即便前面学习了1+2=3)
Colors_1 cp0 = (Colors_1)Enum.Parse(typeof(Colors_1), "0");
//Colors_1 cp0 = Enum.Parse(typeof(Colors_1), "0") as Colors_1; 此写法编译出错,as只能用于可空的类型
Colors_1 cp4 = (Colors_1)Enum.Parse(typeof(Colors_1), "Red"); // 字符串转枚举,结果值为Red。此字符串存在于枚举中。
//Colors_1 cp6 = (Colors_1)Enum.Parse(typeof(Colors_1), "red"); // 字符串转枚举,报异常,说是不存在red这个枚举值。
Colors_1 cp7 = (Colors_1)Enum.Parse(typeof(Colors_1), "red",true); // 字符串转枚举,忽略大小写
//Colors_1 cp5 = (Colors_1)Enum.Parse(typeof(Colors_1), "black"); // 字符串转枚举,报异常“System.ArgumentException” 未找到请求的值“black”。
// 枚举转字符串
string str1 = Colors_1.Blue.ToString(); // 输出Blue
string str2 = cp1.ToString(); // cp1是Green,所以输出Green
string str3 = cp2.ToString(); // cp2值为6,而枚举中不存在此数值,输出6
string str4 = cp3.ToString(); // cp3值为3,而枚举中不存在此数值,输出3
// 枚举转数值
int num1 = (int)(Colors_1.Blue);// 输出4 (也就是Blue对应的)
int num2 = (cp1.GetHashCode()); // 输出2 (也就是Green对应的)
int num3 = (cp2.GetHashCode()); // 输出6
int num4 = (int)(cp2); // 输出6
int num5 = (int)(cp3); // 输出3
// 获取枚举所有值
List<Colors_1> list = new List<Colors_1>();
foreach (var item in Enum.GetValues(typeof(Colors_1)))
{
list.Add((Colors_1)item);
}
// 总结: 获取到所有枚举值之后可以拿每一个枚举值和数据库的进行减法提取,以判断的枚举值是不是存在于数据库中的,用的就是上面的减法(只提取其中的一个值,比如上面的变量c4)
string allNames = " ,Colors_1的所有name: " + string.Join("-", Enum.GetNames(typeof(Colors_1)));
// 下面这段是枚举转val,val转name,列举names
string strResult = color_1.ToString() + " " + ((int)color_1).ToString()+" ,8的name: " + Enum.GetName(typeof(Colors_1), Colors_1.Yellow.GetHashCode()) + " ,8的name(直接传枚举值): " + Enum.GetName(typeof(Colors_1), Colors_1.Yellow) + " ,6的name: " + Enum.GetName(typeof(Colors_1), 6) + " ,Colors_1的所有name: " + string.Join("-", Enum.GetNames(typeof(Colors_1))) + " ,Colors_1的所有value: " + string.Join("-","" );
2023年6月16日21:36:20