【发布时间】:2018-10-08 12:56:30
【问题描述】:
所以我是 C# 新手,但我已经喜欢其他高级语言的一件事是能够在(接近)C 中执行按位运算。我有一堆函数,其中一些或所有参数是可选的,而且我喜欢开关,所以我构建了一个将布尔数组转换为无符号短裤的函数,这使我基本上可以将布尔数组复用为开关的单个值:
namespace firstAsp.Helpers{
public class argMux{
public static ushort ba2ushort (bool[] parms){
//initialize position and output
ushort result = 0;
int i = parms.Length-1;
foreach (bool b in parms){
if (b)//put a one in byte at position of b
//bitwise or with position
result |= (ushort)(1<<i);
i--;
}
return result;
}
}
}
这是一个示例用例:
public IActionResult Cheese(string fname,string lname)
{
bool[] tf = {fname!=null,lname!=null};
switch(argMux.ba2ushort(tf)){
case 3:
@ViewData["Data"]=$"Hello, {fname} {lname}";
break;
case 2:
@ViewData["Data"]=$"Hello, {fname}";
break;
case 1:
@ViewData["Data"]=$"Hello, Dr. {lname}";
break;
case 0:
@ViewData["Data"]="Hello, Dr. CheeseBurger";
break;
}
return View();
}
我的问题是,这是一种有效的方法,还是有更好的方法?我的目标是使用简单,这肯定为我提供,但我也希望它是运行时快速的高效代码。任何指针?这是一种愚蠢的做法吗?欢迎任何和所有反馈,如果你相信它,你甚至可以称我为白痴,我不太敏感。谢谢!
【问题讨论】:
-
这些都不是好的 C#。
-
我只做了大约 3 天的 C#,所以我不会期待其他任何事情。请向我学习你的方法。
标签: c# bit-manipulation multiplexing