【问题标题】:C# Array Move Item (Not ArrayList/Generic List)C# 数组移动项(不是 ArrayList/通用列表)
【发布时间】:2009-03-19 00:09:40
【问题描述】:

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

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

想要将 [四] 移动到 [二] 的前面,例如 旧索引 = 3,新索引 = 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

提前致谢

【问题讨论】:

    标签: c# arrays


    【解决方案1】:
    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 类,谢谢
    • 这个问题看起来对你来说太容易了,如果可以的话,你能试着回答我发布的另一个问题吗...stackoverflow.com/questions/668356/…
    • 我真的不明白这个答案怎么能得到任何赞成票。此处给出的解决方案仅适用于 OP 非常具体的示例。该方法应命名为MoveWithinArrayInOneSpecificCase(...)。例如,如果我们尝试从前向后移动一个元素,我们会得到负的length-parameter(这只是此方法中可能出现的错误之一)。
    【解决方案2】:

    试试这个

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

    【讨论】:

    • 如果我使用我给定的数组单步执行您的代码,那么我会得到一个与我需要的数组不同的数组... ### 1. Array someArray = GetTheArray(); [[一],[二],[三],[四]] ### 2. object temp = someArray.GetValue(3); [[One],[Two],[Three],[Four]] temp is [Four] ### 3. someArray.SetValue(someArray.GetValue(1), 3); someArray.GetValue(1) is [Two] [[One],[Two],[Three],[Two]] ### 4. someArray.SetValue(temp, 1); [[One],[Four],[Three],[Two]] ###我想要[[One],[Four],[Two],[Three]](即移动[四]在[二]前面)
    猜你喜欢
    • 2011-08-05
    • 1970-01-01
    • 2013-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多