gpt4 book ai didi

c# - 如何使用空数组执行 Zip 操作

转载 作者:行者123 更新时间:2023-11-30 15:26:06 25 4
gpt4 key购买 nike

我正在 C# 中试验 Zip 操作,如所述 here .考虑这个代码片段:

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

在其中一个组件为 null 的情况下,避免 System.ArgumentNullException 的正确方法是什么?
比如初始化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 });


Obs:我实际上正在使用 Directory.EnumerateDirectoriesDirectory.EnumerateFiles 而不是 int[]string[].

最佳答案

下面有点难看,但您可以像这样使用空合并运算符 ??:

var numbersAndWords = 
(numbers ?? Enumerable.Empty<int>()).Zip(
(words ?? Enumerable.Empty<string>()),
(n, w) => new { Number = n, Word = w });

或者创建一个扩展方法来做同样的事情(你可能想要一个比 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 });

关于c# - 如何使用空数组执行 Zip 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30042226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com