2011-08-31 6 views
3

linq에 이미 콜렉션을 생성하는 것이 포함되어 있는지 궁금합니다. 이러한 구조는 때로는 정말 편리으로linq을 사용한 동적 컬렉션 생성

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

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

, 차라리을 다시 구현하지 않는 게 좋을 :

내가 현재 그것을 위해 다음과 같은 코드를 사용, 내가 GUID를 동적 수집을 원하는 말할 수 있습니다 그런 일이 이미 있다면 바퀴.

답변

2

당신은 항목을 인스턴스화하기 위해 다음 Select를 사용 INT의 시퀀스를 생성하는 Range을 사용할 수

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

나는 그런 것도 생각했습니다. 하지만 그것에 대해 두 가지를 좋아하지 않았습니다. - 필요없는 열거 형의 추가 레이어가 있습니다. - 그것은 어떤 감정의 끝없는 소스가 없습니다 :) – Fionn

+0

@ Fiionn, true. 이것이 여러분이 추구하는 것이라면, 여러분의 구현이 갈 길이 멀다고 생각합니다. –

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 생성 내가 IX에 대한 간단한 작성자했다 (TState 초기 상태 (Initial), Func을 조건 Func을의 반복 할 Func을 resultSelector)

http://www.thinqlinq.com/Post.aspx/Title/Ix-Interactive-Extensions-return을에