C#数组移动项(非ArrayList/Generic List)

Mar*_*ark 3 c# arrays

有一个对象是一个数组(不是arraylist或泛型),可以容纳一组任何东西......

[[One],[Two],[Three],[Four]]
Run Code Online (Sandbox Code Playgroud)

想要将[Four]移动到[Two]前面,例如oldIndex = 3,newIndex = 1,那么结果将是......

[[One],[Four][Two],[Three]]
Run Code Online (Sandbox Code Playgroud)

什么是在.NET 2.0中最有效的方法,例如

PropertyInfo oPI = ObjectType.GetProperty("MyArray", BindingFlags.Public | BindingFlags.Instance);
object ObjectToReorder = oPI.GetValue(ParentObject, null);
Array arr = ObjectToReorder as Array;
int oldIndex = 3;
int newIndex = 1;
//Need the re-ordered list still attached to the ParentObject
Run Code Online (Sandbox Code Playgroud)

提前致谢

Wyz*_*fen 6

void MoveWithinArray(Array array, int source, int dest)
{
  Object temp = array.GetValue(source);
  Array.Copy(array, dest, array, dest + 1, source - dest);
  array.SetValue(temp, dest);
}
Run Code Online (Sandbox Code Playgroud)

  • 我真的不明白这个答案怎么会得到任何赞成票。此处给出的解决方案仅适用于 OP 非常具体的示例。该方法应命名为“MoveWithinArrayInOneSpecificCase(...)”。例如,如果我们尝试从前向后移动一个元素,我们会得到负的 `length` 参数(这只是此方法中可能的错误之一)。 (2认同)