Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 需要在初始化时/之前添加/插入新项目_C# - Fatal编程技术网

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值。字符串的前缀在某种程度上隐藏了这一点,这并不明显,您想要的条件完全与数组有关,而不是与输入字符串有关。虽然很微妙,但仍然存在。