C# 需要在初始化时/之前添加/插入新项目
我有一个如下的代码,它通过使用以下命令拆分字符串来初始化数组C# 需要在初始化时/之前添加/插入新项目,c#,C#,我有一个如下的代码,它通过使用以下命令拆分字符串来初始化数组ArrayEdge FilterRanges: string[] arrayEdgeFilterRanges = edgeFilterRanges.Split(new string[] {}, StringSplitOptions.RemoveEmptyEntries); 但是我需要在数组的第一个元素中添加一个常规项0。我知道我不能使用arrayEdgeFilterRanges.Insert(0,“0”)因为数组在初始化语句时获得了
ArrayEdge FilterRanges
:
string[] arrayEdgeFilterRanges = edgeFilterRanges.Split(new string[] {}, StringSplitOptions.RemoveEmptyEntries);
但是我需要在数组的第一个元素中添加一个常规项0
。我知道我不能使用arrayEdgeFilterRanges.Insert(0,“0”)代码>因为数组在初始化语句时获得了固定大小
如何在数组的第一个位置添加项0
string edgeFilterRanges = "4,2,1";
string[] arrayEdgeFilterRanges = edgeFilterRanges.Split(new string[] {}, StringSplitOptions.RemoveEmptyEntries);
foreach (string i in arrayEdgeFilterRanges)
{
System.Console.Write(i);
}
没关系,伙计们,我现在只找到一个简单的方法
edgeFilterRanges = "0,"+edgeFilterRanges;
string[] arrayEdgeFilterRanges = edgeFilterRanges.Split(new string[] {}, StringSplitOptions.RemoveEmptyEntries);
foreach (string i in arrayEdgeFilterRanges)
{
System.Console.Write(i);
}
多种选择之一:
var arrayWithZero = Enumerable.Repeat(“0”, 1)
.Concat(array)
.ToArray();
数组创建后不能更改数组本身,但您可以创建一个更大的新数组,并使用或array.CopyTo()
复制值。然而,这确实表现不佳
或者,如果只在foreach
循环中使用数组,则可以使用LINQ.Concat()
方法迭代两个单独的数组,就像它们是一个数组一样
string[] prefix = new []{"0"};
foreach (string i in prefix.Concat(arrayEdgeFilterRanges)
{ ... }
建议简化答案:
string[] arrayEdgeFilterRanges = ("0,"+edgeFilterRanges).Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
您可以使用LINQ和Concat来实现这一点。
使用您的代码,这将是:
string[] arrayEdgeFilterRanges =
new string[1] { "0" }.Concat(
inString.Split(new string[] {}, StringSplitOptions.RemoveEmptyEntries)).ToArray();
类似的解决方案。创建一个大小合适的新数组,并将所需的所有内容放入其中。或者创建一个列表
,将所有内容添加到该列表中,并在其上调用ToArray()
。是否确实要新字符串[]{}
,该字符串将为您提供一个{“4”、“、”、“2”、“、”和“1”}数组,我不想更改源代码中的任何内容,因此我认为可以在拆分数组的同时将第一项加载到数组中string@MonaCoder如果你想改变代码的功能,你必须改变代码。@ScottChamberlain实际上,空的字符串
数组
会导致拆分
以空格分隔,空格不在那里,因此返回一个元素数组。无需更改edgeFilterRanges
-只需在串联字符串上拆分:(“0,+edgeFilterRanges.Split(……而且,您的空<代码>字符串< /Cord>数组不会在逗号上分裂。这是非常可怕的,不会创建请求的答案。考虑<代码> > ArayEdGeFieldRetrys是<代码> String []/Cord>和<代码>枚举类型。重复(0, 1)
是IEnumerable
@NetMage,我甚至不会说它很糟糕,从可读性的角度来看,预加字符串的黑客行为更糟糕。这读起来很好,它的作用也很清楚,性能不是问题,如果是,那么显然有更好的解决方案。关于类型不匹配,是的,我已经解决了由于这个例子,在整数上出现了一个愚蠢的错误。我认为从可读性的角度来看,在字符串前面加上前缀更为清晰。它简单、直接,只创建一个数组,只需要一个额外的函数调用。@NetMage我不同意。这种解决方案很明显,您希望拆分现有字符串,然后插入一个give在它前面加上n值。字符串的前缀在某种程度上隐藏了这一点,这并不明显,您想要的条件完全与数组有关,而不是与输入字符串有关。虽然很微妙,但仍然存在。