2013-06-04 4 views
3

Mac OSX 10.8에서 Unity3D, Mono, C#을 사용하고 있습니다. .Net Enumerable.Zip을 사용하려고합니다. 그러나 MSDN 예제를 복사하여 붙여 넣으면 cs0117 오류가 발생합니다.CS1061, CS0117 :`System.Linq.Enumerable '에`Zip'에 대한 정의가 없습니다

최소 작동하지 예 :

using UnityEngine; 
using System.Collections; 
using System.Linq; 

public class Asteroids : MonoBehaviour { 
void Start() { 
    int[] numbers = { 1, 2, 3, 4 }; 
    string[] words = { "one", "two", "three" }; 
    var numbersAndWords = numbers.Zip(words, (first, second) => first + " " + second); 
} 
} 

오류 메시지 :

오류 CS1061 : 유형 int[]' does not contain a definition for 우편 번호 '와 Zip' of type INT는 [] 확장자가없는 방법'볼 수 있습니다 (당신에게 있습니다 실종 사용 지시문 또는 어셈블리 참조?)

오류 CS0117 : System.Linq.Enumerable' does not contain a definition for 우편 '이 앞으로 일어날했던 이유

을 나는이있어, "Enumerable.Zip"와 "numbers.Zip"를 교체하려고?

답변

6

Zip()이 4 .NET으로 새로운

그것은 모노 버전처럼 보인다 (닷넷 3.5에 도입 된 LINQ의 나머지 부분과는 달리)를 가지고 있지 않습니다.

7

@SLaks '답변을 감안할 때, 그것은 당신의 자신의 우편 롤 쉽게 :

public static IEnumerable<TResult> Zip<TA, TB, TResult>(
    this IEnumerable<TA> seqA, IEnumerable<TB> seqB, Func<TA, TB, TResult> func) 
{ 
    if (seqA == null) throw new ArgumentNullException("seqA"); 
    if (seqB == null) throw new ArgumentNullException("seqB"); 

    using (var iteratorA = seqA.GetEnumerator()) 
    using (var iteratorB = seqB.GetEnumerator()) 
    { 
     while (iteratorA.MoveNext() && iteratorB.MoveNext()) 
     { 
      yield return func(iteratorA.Current, iteratorB.Current); 
     } 
    } 
} 
관련 문제