C# 在二维数组C中交换元素#

C# 在二维数组C中交换元素#,c#,arrays,swap,multidimensional-array,C#,Arrays,Swap,Multidimensional Array,我正在使用C#,我对这门语言相当陌生,但我以前使用过类似的语言,所以我理解基本语法 我有一个类型为Object的2D数组。(X表示什么值,Y是什么记录)它在第0列和第1列中存储两个字符串,在第2列中存储一个MessageBoxIcon,在第3列中存储一个MessageBoxButtons 我希望能够交换两张记录 每次对数组进行更改时,我都使用列1填充列表框。(使用循环)我对这个系统很满意。 我已经在列表框的一侧放置了+和-按钮,但我不知道如何执行其背后的代码 我希望这样,当我单击+按钮时,它会将

我正在使用C#,我对这门语言相当陌生,但我以前使用过类似的语言,所以我理解基本语法

我有一个类型为
Object
的2D数组。(
X
表示什么值,
Y
是什么记录)它在第0列和第1列中存储两个字符串,在第2列中存储一个
MessageBoxIcon
,在第3列中存储一个
MessageBoxButtons

我希望能够交换两张记录

每次对数组进行更改时,我都使用列1填充列表框。(使用循环)我对这个系统很满意。 我已经在列表框的一侧放置了+和-按钮,但我不知道如何执行其背后的代码

我希望这样,当我单击+按钮时,它会将当前选定的记录向上移动一条记录。(即,它减少其Y位置并增加其上方记录的Y坐标)它将需要碰撞与该记录关联的所有值

有人能给我一个函数来做这个吗


我希望我对这一点解释得足够清楚。

这将需要用交换两个变量值的旧方法来完成:

var t = a;
a = b;
b = t;
但是,如果a和b是2d数组的行,则必须一次执行一个元素

public void Swap2DRows(Array a, int indexOne, int indexTwo) {
  if (a == null} { throw new ArgumentNullException("a"); }
  if (a.Rank != 2) { throw new InvalidOperationException("..."); }

  // Only support zero based:
  if (a.GetLowerBound(0) != 0) { throw new InvalidOperationException("..."); }
  if (a.GetLowerBound(1) != 0) { throw new InvalidOperationException("..."); }

  if (indexOne >= a.GetUpperBound(0)) { throw new InvalidOperationException("..."); }
  if (indexTwo >= a.GetUpperBound(0)) { throw new InvalidOperationException("..."); }

  for (int i = 0; i <= a.GetUpperBound(1); ++i) {
    var t = a[indexOne, i];
    a[indexOne, i] = a[indexTwo, i];
    a[indexTwo, i] = t;
  }
}
public void Swap2DRows(数组a、int indexOne、int indexTwo){
如果(a==null}{抛出新的ArgumentNullException(“a”);}
如果(a.Rank!=2){抛出新的InvalidOperationException(“…”);}
//仅支持基于零的:
如果(a.GetLowerBound(0)!=0){抛出新的InvalidOperationException(“…”);}
如果(a.GetLowerBound(1)!=0){抛出新的InvalidOperationException(“…”);}
如果(indexOne>=a.GetUpperBound(0)){抛出新的InvalidOperationException(“…”);}
如果(indexTwo>=a.GetUpperBound(0)){抛出新的InvalidOperationException(“…”);}

对于(int i=0;i这将需要按照交换两个变量值的旧方法进行:

var t = a;
a = b;
b = t;
但是,如果a和b是2d数组的行,则必须一次执行一个元素

public void Swap2DRows(Array a, int indexOne, int indexTwo) {
  if (a == null} { throw new ArgumentNullException("a"); }
  if (a.Rank != 2) { throw new InvalidOperationException("..."); }

  // Only support zero based:
  if (a.GetLowerBound(0) != 0) { throw new InvalidOperationException("..."); }
  if (a.GetLowerBound(1) != 0) { throw new InvalidOperationException("..."); }

  if (indexOne >= a.GetUpperBound(0)) { throw new InvalidOperationException("..."); }
  if (indexTwo >= a.GetUpperBound(0)) { throw new InvalidOperationException("..."); }

  for (int i = 0; i <= a.GetUpperBound(1); ++i) {
    var t = a[indexOne, i];
    a[indexOne, i] = a[indexTwo, i];
    a[indexTwo, i] = t;
  }
}
public void Swap2DRows(数组a、int indexOne、int indexTwo){
如果(a==null}{抛出新的ArgumentNullException(“a”);}
如果(a.Rank!=2){抛出新的InvalidOperationException(“…”);}
//仅支持基于零的:
如果(a.GetLowerBound(0)!=0){抛出新的InvalidOperationException(“…”);}
如果(a.GetLowerBound(1)!=0){抛出新的InvalidOperationException(“…”);}
如果(indexOne>=a.GetUpperBound(0)){抛出新的InvalidOperationException(“…”);}
如果(indexTwo>=a.GetUpperBound(0)){抛出新的InvalidOperationException(“…”);}

对于(int i=0;i是您的数组
对象[]
对象[],]
?请尽快远离数组,C#(和其他语言)有许多集合类,列表在这种情况下是一个不错的选择。这些类有许多已构建和测试的方法。这意味着不必编写那么多自定义方法…您的数组
对象[]
对象[,]
?尽快远离数组、C#(和其他语言)在这种情况下,有许多集合类和列表是一个很好的选择。这些类有许多构建和测试的方法。这意味着不必编写这么多自定义方法…感谢堆!!!!我的大脑完全冻结了。我稍微更改了我的条件,所以数组只需处理字符串,然后我删除了所有数据清理,因为我已经有东西做了完全相同的事情,但这是我的最终结果(int i=0;我啊,不!我成功了,现在我在最后一关被打败了:删除记录。最好提出一个新问题!感谢堆!!!!我的大脑完全冻结了。我稍微改变了我的标准,所以数组只需要处理字符串,然后我删除了所有数据清理,因为我已经有东西做exac了这不是同样的事情,但这是我的最终结果。`public void Swap2DRows(string[,]a,int indexOne,int indexTwo){for(int i=0;我啊,不!我做了这件事,现在我在最后一个障碍:删除记录中失败了。最好提出一个新问题!