2013-06-04 36 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 []' 可以找到(你 缺少使用指令或裝配參考?)

I試圖用 「Enumerable.Zip」 代替 「numbers.Zip」,然後我得到這個:

錯誤CS0117:System.Linq.Enumerable' does not contain a definition for郵編」

爲什麼這些happend?

回答

6

Zip()是新的.NET 4(不像LINQ的休息,這是在.net 3.5中引入)

它看起來像你的單聲道的版本沒有它。

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); 
     } 
    } 
} 
相關問題