C#数组移动项目(不是ArrayList / Generic List)

3

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

[[One],[Two],[Three],[Four]]

想要将 [Four] 移动至 [Two] 的前面,例如: oldIndex = 3,newIndex = 1 结果应该是...

[[One],[Four][Two],[Three]]

在.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

谢谢提前帮助。
2个回答

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);
}

这才更像样了,这只能说明回答多少问题并不重要,重要的是回答有多好。 我不知道你可以将一个数组复制到它自己身上。 我猜这就是 ArrayList 如何进行插入的方式?我试着用反射来编写代码,但我找不到 ArrayList 类。 谢谢。 - Mark
那个问题对你来说似乎太简单了,如果可以的话,你能否试着回答我发布的另一个问题... https://dev59.com/VEbRa4cB1Zd3GeqP5PRK - Mark
2
我真的不明白这个答案怎么可能会得到任何赞成票。这里给出的解决方案只适用于OP非常特定的示例。该方法应该被命名为MoveWithinArrayInOneSpecificCase(...)。例如,如果我们尝试将一个元素从前面移动到后面,我们会得到负的“length”参数(这种方法中可能出现的错误之一)。 - Whyser

3

试试这个

Array someArray = GetTheArray();
object temp = someArray.GetValue(3);
someArray.SetValue(someArray.GetValue(1), 3);
someArray.SetValue(temp, 1);

如果我使用你给出的数组来逐步运行你的代码,那么得到的数组与我所需的不同...

  1. 数组 someArray = GetTheArray(); [[One],[Two],[Three],[Four]]

  1. 对象 temp = someArray.GetValue(3); [[One],[Two],[Three],[Four]] temp 是 [Four]

  1. someArray.SetValue(someArray.GetValue(1), 3); someArray.GetValue(1) 是 [Two] [[One],[Two],[Three], [Two]]

  1. someArray.SetValue(temp, 1); [[One], [Four], [Three], [Two]]

我想要 [[One], [Four], [Two], [Three]] (即将 [Four] 移到 [Two] 前面)。
- Mark

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接