使用linq生成动态集合

时间:2011-08-31 13:07:10

标签: c# linq ienumerable

我想知道linq是否已经包含了动态生成集合的内容。

让我们说我想要一个GUID的动态集合,我目前使用类似下面的代码:

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

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

因为这样的结构有时候非常方便,如果已经存在,我宁愿不重新实现轮子。

3 个答案:

答案 0 :(得分:2)

不,我不相信LINQ目前包含类似的内容。你最接近的将是:

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

答案 1 :(得分:2)

您可以使用Range生成一系列整数,然后使用Select来实例化该项:

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

答案 2 :(得分:0)

您可能希望查看带有LINQ和RX的人员的InteractiveExtensions(IX)。除此之外,它还包括一个类似于你提议的Generate方法:

public static IEnumerable Generate(TState initialState,Func condition,Func iterate,Func resultSelector)

我在http://www.thinqlinq.com/Post.aspx/Title/Ix-Interactive-Extensions-return

做了一个简短的IX写作