从其他一维数组初始化一维数组

Initializing a one-dimensional array from other one-dimensional arrays

我觉得这有一个非常简单的答案,但我无法理解,但在互联网上找不到任何相关内容后,这是我的镜头。
本质上,我想在 C# 中从 javascript 做这样的事情:

var abc = ["a", "b", "c"]
var abcd = [...abc, "d"]

"Spreading"将一维数组abc的内容放入另一个一维数组abcd,在初始化时加入新的值。
然而,在 C# 中复制此行为不会按预期工作:

string[] abc = { "a", "b", "c" };
string[] abcd = { abc, "d" };

我最接近在 C# 中复制它的是列表,如下所示:

string[] abc = { "a", "b", "c" };
var abcd = new List<string>();
abcd.AddRange(abc);
abcd.Add("d");

我可以通过直接用 "d" 字符串初始化列表来在上面的例子中节省一行(顺序对我来说并不重要,我只是检查一下如果集合包含我正在寻找的某个项目),但与初始化数组相比,使用列表本身效率非常低,因为我无意稍后修改或添加项目。
有什么方法可以在一行中从其他一维数组初始化一维数组?

第 1 行:

string[] abc = { "a", "b", "c" };
var abcd = new List<string>(abc) { "d" };

列表的构造函数可以采用另一个列表。

如果您正在寻找单线,您可以使用 Enumerable.Append() method。如果希望 abcd 的类型为字符串数组,可以在末尾添加一个 .ToArray()

好了:

string[] abcd = abc.Append("d").ToArray();

注意:Append() 方法在 .NET Framework 4.7.1 及更高版本中可用

对于 .NET Framework 4.7 或更早版本,一种方法是使用 Enumerable.Concat() method:

string[] abcd = abc.Concat(new[] { "d" }).ToArray();
string[] abcde = abc.Concat(new[] { "d", "e" }).ToArray();