fir*_*mer 4 c# linq arrays iteration loops
我正在尝试使用 C# 中的 Zip 操作,如此处所述。考虑这个代码片段:
int[] numbers = new[] { 1, 2, 3, 4 };
string[] words = new string[] { "one", "two", "three", "four" };
var numbersAndWords = numbers.Zip(words, (n, w) => new { Number = n, Word = w });
foreach (var nw in numbersAndWords)
{
Console.WriteLine(nw.Number + nw.Word);
}
Run Code Online (Sandbox Code Playgroud)
System.ArgumentNullException如果其中一个组件出现这种情况,避免的正确方法是什么null?
例如初始化words为null,像这样
int[] numbers = new[] { 1, 2, 3, 4 };
string[] words = null;
// The next line won't work
var numbersAndWords = numbers.Zip(words, (n, w) => new { Number = n, Word = w });
Run Code Online (Sandbox Code Playgroud)
Obs:我实际上正在使用Directory.EnumerateDirectoriesandDirectory.EnumerateFiles而不是int[]and string[]。
??下面的代码有点难看,但是您可以像这样使用空合并运算符:
var numbersAndWords =
(numbers ?? Enumerable.Empty<int>()).Zip(
(words ?? Enumerable.Empty<string>()),
(n, w) => new { Number = n, Word = w });
Run Code Online (Sandbox Code Playgroud)
或者创建一个具有相同功能的扩展方法(您可能想想一个比 更好的名称OrEmpty):
public static class MyEnumerableExtensions
{
public static IEnumerable<T> OrEmpty<T>(this IEnumerable<T> self)
{
return self ?? Enumerable.Empty<T>();
}
}
var numbersAndWords = numbers.OrEmpty()
.Zip(words.OrEmpty(), (n, w) => new { Number = n, Word = w });
Run Code Online (Sandbox Code Playgroud)