.NET中LINQ编程简化代码实现数组、遍历、转换等功能(2)
3. 生成随机序列
这是一个生成N长度随机序列的简单技巧:
以下为引用的内容:
Random rand = new Random(); var randomSeq = Enumerable.Repeat(0, N).Select(i => rand.Next()); |
有了LINQ的延迟特性,序列不会实现进行计算并保存到数组中,而是在迭代randomSeq的时候按需生成随机数。
LINQ同样也是生成各种类型字符串的好工具。对于测试或调试,生成字符串时很有用的。假设我们需要生成一个N长度的字符串,按照“ABCABCABC”的方式。使用LINQ,解决方案非常优雅:
以下为引用的内容:
string str = new string( Enumerable.Range(0, N) .Select(i => (char)(‘A’ i % 3)) .ToArray()); |
4.Petar Petrov给出了另外一种有趣的方式使用LINQ来生成字符串:
以下为引用的内容:
string values = string.Join(string.Empty, Enumerable.Repeat(pattern, N).ToArray()); |
5. 转换序列或集合
在C#或VB中我们不能实现把序列从T类型转换为U类型,即使T从U类继承。因此,即使把List转换为List转换为IEnumerable的话,LINQ有一个简单而有效的解决方案:
以下为引用的内容:
IEnumerablestrEnumerable = …; IEnumerable |
如果我们需要转换List为List,LINQ也提供了解决方案,但是它会进行列表的复制:
以下为引用的内容:
ListstrList = …; List(strList.Cast()); |
Chris Cavanagh建议另外一种解决方式:
以下为引用的内容:
var objList = strList.Cast().ToList(); |