在可变长度数组c#之间复制

时间:2015-05-14 05:46:12

标签: c# arrays

所以我有一个名为page的字符串数组和一个名为notesSplit的字符串数组,它是使用notes.split()创建的。

notessplit可能有不同数量的换行符,但永远不会超过10行。

我想覆盖" page"的内容。如果索引在notessplit中不存在,则从索引20 - 30留下空白行。

有什么想法吗?

var page = new string[44]; <-- actually this is from a text file
string notes = "blah \n blah \n";    
string[] notesSplit = notes.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);

我最初想出的是:

for (var i = 0; i < 9; i++) 
{ 
  if (notesSplit[i] != null) 
  { 
    Page[i + 20] = notesSplit[i]; 
  } else { 
    Page[i + 20] = System.Environment.NewLine; 
  } 
}

2 个答案:

答案 0 :(得分:3)

我很确定这就是你要找的东西。

public string[] Replace(string[] page, string[] notes, int start, int length)
{
  for(var i = 0; i + start < page.Length && i < length; i++)
  {
    if(notes != null && notes.Length > (i))
      page[i+start] = notes[i];
    else
      page[i+start] = Enviroment.NewLine;
  }

  return page;
}

答案 1 :(得分:2)

另一种选择,而不是循环遍历数组, 是使用Array.Resize方法和Array.Copy方法:

// Copied your array definiton:
var page = new string[44];
string notes = "blah \n blah \n";
string[] notesSplit = notes.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);

// The suggested solution:
if (notesSplit.Length < 10) 
{    
    Array.Resize(ref notesSplit, 10);
}
Array.Copy(notesSplit, 0, page, 20, 10);

有关Array.Copy的其他信息,请访问here on MSDN