位域获取数字值的列表

歪歪 2012-11-27 10:57:47

[Flags]
public enum XX : int
{
a = 1,
b = 2,
c = 4
}

XX t = XX.a | XX.b;
int intValue = (int)t; //3
string strValue = t.ToString(); //a, b
string intArray = Func(?); //这里希望的返回值是 1, 2


跪求Func函数的实现
...全文
126 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
歪歪 2012-11-27
  • 打赏
  • 举报
回复
多谢各位,用一个笨方法实现了,还是比较好理解

            var et = typeof(XX);
            var arr = strValue.Split(',');
            var tmp = new int[arr.Length];
            for (int i = 0, j = arr.Length; i < j; i++)
            {
                tmp[i] = (int)Enum.Parse(et, arr[i]);
            }
            var val = string.Join(",", tmp);
瑞卡哥哥 2012-11-27
  • 打赏
  • 举报
回复
请参考如下代码,控制台直接可用!
            int i=0;
            int intValue=3;
            while(Math.Pow(2,i)<=intValue)
            {

                if ((intValue &(int) Math.Pow(2, i)) != 0)
                {
                    Console.WriteLine(Math.Pow(2, i));
                }
                    i++;
            }
threenewbee 2012-11-27
  • 打赏
  • 举报
回复
修正下 string intArray = string.Join(",", Enumerable.Range(0, 32).Select(x => (intValue | (1 << x)) != intValue ? 0 : 1 << x).Where(x => x != 0).Select(x => x.ToString()).ToArray());
歪歪 2012-11-27
  • 打赏
  • 举报
回复
问题莫挑战还是板块人气不足呢,打酱油的都没有吗
threenewbee 2012-11-27
  • 打赏
  • 举报
回复
string intArray = string.Join(",", Enumerable.Range(0, 30).Select(x => (intValue | (1 << x)) != intValue ? 0 : 1 << x).Where(x => x != 0).Select(x => x.ToString()).ToArray());
bdmh 2012-11-27
  • 打赏
  • 举报
回复
你不遍历枚举,你怎么得到啊,你这个3可以有多种组合,谁知到你是枚举元素运算的结果啊
歪歪 2012-11-27
  • 打赏
  • 举报
回复
最好不用遍历成员的方式实现,座等牛人指教

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧