我在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 for
Zip'和 没有扩展方法Zip' of type
int []'可以找到(是你 缺少using指令或程序集引用?)
我尝试用“Enumerable.Zip”替换“numbers.Zip”,然后我得到了这个:
错误CS0117:
System.Linq.Enumerable' does not contain a definition for
Zip'
为什么会发生这些?
答案 0 :(得分: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);
}
}
}
答案 1 :(得分:6)
Zip()
是.Net 4的新手。(与.Net 3.5中引入的LINQ的其余部分不同)
看起来你的Mono版本没有它。