4

我在 Mac OSX 10.8 上使用 Unity3D、Mono、C#。我正在尝试使用.Net Enumerable.Zip。但是复制粘贴 MSDN 示例会给我一个 cs0117 错误。

最小的不工作示例:

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 forZip' 并且找不到扩展方法Zip' of typeint[]'(您是否缺少 using 指令或程序集引用?)

我尝试用“Enumerable.Zip”替换“numbers.Zip”,然后我得到了这个:

错误 CS0117:System.Linq.Enumerable' does not contain a definition forZip'

为什么会发生这些?

4

2 回答 2

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);
        }
    }
}
于 2013-06-04T22:28:15.480 回答
6

Zip()是 .Net 4 的新手。(与 .Net 3.5 中引入的 LINQ 的其余部分不同)

看起来你的 Mono 版本没有它。

于 2013-06-04T21:33:26.370 回答