天天看點

用LINQ簡化代碼的5個技巧

1.初始化數組

有時候,你隻是需要初始化一個數組用來測試資料,比如一個數組都是-1, 一個數組從0,1,...9, 另外一個是100,110,120....190,用LINQ可以簡化你的代碼:

int[] a = Enumerable.Repeat(-1, 10).ToArray();
int[] b = Enumerable.Range(0, 10).ToArray();
int[] c = Enumerable.Range(0, 10).Select(i => 100 + 10 * i).ToArray();
           

2.一次周遊多個數組

有時候我們希望在一個循環中周遊多個數組:

foreach (var x in array1) {
    DoSomething(x);
}

foreach (var x in array2) {
    DoSomething(x);
}
           

用LINQ就簡單多了:

foreach (var x in array1.Concat(array2)) {
    DoSomething(x);
}
           

3.産生随機序列

有時候我們需要産生一個随機序列,用LINQ來生成非常友善,下列的代碼由于LINQ的延遲執行特性,隻有在周遊的時候才真正産生随機數:

Random rand = new Random();
var randomSeq = Enumerable.Repeat(0, N).Select(i => rand.Next());
           

4.生成字元串

有時候為了測試,我們需要生成特殊的字元串,例如:ABCABCABC....長度是N,使用LINQ會非常優雅:

string str = new string(
    Enumerable.Range(0, N)
    .Select(i => (char)('A' + i % 3))
    .ToArray());
           

或者:

string values = string.Join(string.Empty, Enumerable.Repeat(pattern, N).ToArray());
           

5.轉換序列或集合

C#中你不能輕易轉換List<string>為List<object>,但可以轉換IEnumerable<U> 為IEnumerable<T>:

IEnumerable<string> strEnumerable = ...;
IEnumerable<object> objEnumerable = strEnumerable.Cast<object>();
           

如果你要轉換List<string>為List<object>,有點麻煩:

List<string> strList = ...;
List<object> objList = new List<object>(strList.Cast<object>());
           

或者:

var objList = strList.Cast<object>().ToList();
           

繼續閱讀