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);
}   
}

エラーメッセージ:

error CS1061: Type int[]' does not contain a definition forZip' and no extension method Zip' of typeint[]' could be found (using ディレクティブまたはアセンブリ参照がありませんか?)

「numbers.Zip」を「Enumerable.Zip」に置き換えてみたところ、次のようになりました。

エラー CS0117: System.Linq.Enumerable' does not contain a definition forZip'

なぜこれらが起こったのですか?

4

2 に答える 2

7

@SLaks の回答があれば、独自の Zip を展開するのは簡単です。

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 に答える