2011-08-31 78 views
3

我不知道linq是否已經包含了一些東西來動態生成集合。LINQ的動態集合生成

可以說我想要的GUID的動態集合,我目前使用類似下面的代碼吧:

public static IEnumerable<T> Generate<T>(Func<T> generator) 
{ 
    for (;;) 
    { 
     yield return generator(); 
    } 
} 

var someIds = MyLinqExtensions.Generate(Guid.NewGuid).Take(10); 

由於這樣的結構是非常方便的,有時,我寧願不重新實現如果已經存在這種事物

回答

2

你可以使用Range產生整數序列中的,然後使用Select來實例化項目:

Enumerable.Range(1, 10).Select(i => Guid.NewGuid()); 
+0

我也想過這樣的事情但我不喜歡兩件事: - 它有一個我不需要的枚舉的附加層。 - 它沒有任何感覺的無盡的源泉:) – Fionn

+0

@Fionn,真的。如果這就是你所追求的,我認爲你的實施是一條路 –

2

不,我不認爲LINQ包含此刻的任何東西。你能來最接近的將是:

var someIds = Enumerable.Repeat(0, int.MaxValue) 
         .Select(ignored => Guid.NewGuid) 
         .Take(10); 
+0

看起來像這樣會成爲下一個版本的一個很好的功能,然後;) – Fionn

+0

@Fionn:我可以想到很多事情,我會發現更多有用的,說實話... –

0

你可能想看看InteractiveExtensions( IX)來自帶給你LINQ和RX的同一個人。除其他事項外,它包括生成類似於方法你提議:

公共靜態的IEnumerable生成(TSTATE初始化狀態,Func鍵條件,Func鍵迭代,Func鍵resultSelector)

我做IX的簡短書面記錄在http://www.thinqlinq.com/Post.aspx/Title/Ix-Interactive-Extensions-return