2010-07-29 44 views
2

我们已经在我们的数据库指示,看起来像这样一周的每一天真/假标志这一领域:“1111110”转换字符数组/字符串布尔数列

我需要这个值转换为布尔数组。

对于我写了下面的代码:

char[] freqs = weekdayFrequency.ToCharArray(); 
bool[] weekdaysEnabled = new bool[]{ 
    Convert.ToBoolean(int.Parse(freqs[0].ToString())), 
    Convert.ToBoolean(int.Parse(freqs[1].ToString())), 
    Convert.ToBoolean(int.Parse(freqs[2].ToString())), 
    Convert.ToBoolean(int.Parse(freqs[3].ToString())), 
    Convert.ToBoolean(int.Parse(freqs[4].ToString())), 
    Convert.ToBoolean(int.Parse(freqs[5].ToString())), 
    Convert.ToBoolean(int.Parse(freqs[6].ToString())) 
}; 

而且我觉得这种方式太笨重,因为很多转换。

会是什么这一固定长度字符串转换成布尔Array的理想/干净的方式??

我知道你可以在for循环中写这个,但一周中的天数永远不会改变,因此我认为这是更高效的方法。

回答

10

LINQ的位可以使这是一个非常简单的任务:

var weekdaysEnabled = weekdayFrequency.Select(chr => chr == '1').ToArray(); 

注意string已经实现IEnumerable<char>,这样你就可以直接使用就可以了LINQ方法。

+1

测试应该是'CHR ==“1''因为你是比较字符。 – 2010-07-29 07:53:28

+0

那是什么我爱计算器,你问一个问题,一分钟后,你有UR答案; d,你必须在双引号更改为单引号,虽然cuz我们正在处理的字符,但否则该编译OK:d谢谢! – Peter 2010-07-29 07:54:53

+0

@Darin:随意只要编辑下一次后,当它显然是一个错字。 ;) – Noldorin 2010-07-29 07:55:57

2

在.NET 2

bool[] weekdaysEnabled1 = 
Array.ConvertAll<char, bool>(
    freqs, 
    new Converter<char, bool>(delegate(char c) { return Convert.ToBoolean(int.Parse(freqs[0].ToString())); })); 
+0

感谢上帝对LINQ权利;-)感谢您的帮助插件。 – Peter 2010-07-29 08:36:59

+0

weekdaysEnabled1是错误的:'allWeekdays'是正确的 这只是一个更简洁的语法,但我认为转换次数是相同的:(我不知道为什么公共静态布尔ToBoolean(char值)方法没有实现在框架中 – Florian 2010-07-29 08:48:24