Phương thức Enumerable.Repeat trong namespace System.Linq tạo một chuỗi (sequence) lặp lại một giá trị cho số lần xác định. Trả về IEnumerable.
Ví dụ: Lặp số 10 năm lần
var val = Enumerable.Repeat(10, 5);
// Kết quả: 10, 10, 10, 10, 10
Mã nguồn hoàn chỉnh
using System;
using System.Linq;
class Demo
{
static void Main()
{
var val = Enumerable.Repeat(10, 5);
foreach (int res in val)
Console.WriteLine(res);
}
}
Kết quả
10
10
10
10
10
Các trường hợp sử dụng phổ biến
| Mục đích | Code |
|---|---|
| Khởi tạo mảng/list giá trị mặc định | var arr = Enumerable.Repeat(0, 100).ToArray(); |
| Tạo chuỗi lặp để test | var testData = Enumerable.Repeat("test", 1000); |
| Kết hợp với Zip | values.Zip(Enumerable.Repeat(factor, values.Count), (v,f) => v*f) |
| Default value cho left join | left.GroupJoin(right, ..., (l, r) => r.DefaultIfEmpty(defaultVal)) |
Lưu ý
- Thực thi trì hoãn (deferred) - không cấp phát bộ nhớ cho toàn bộ mảng ngay lập tức.
- Gọi
.ToArray()hoặc.ToList()để thực thi ngay và cấp phát bộ nhớ. count < 0némArgumentOutOfRangeException.- Với reference type, tất cả phần tử trỏ đến cùng một instance (shallow copy).
Ví dụ reference type
var lists = Enumerable.Repeat(new List(), 3).ToArray();
lists[0].Add(1);
Console.WriteLine(lists[1].Count); // 1 - cùng object!
Khắc phục: Enumerable.Range(0, 3).Select(_ => new List