我正在使用C#,我对该语言还不熟悉,但之前我使用过类似的语言,因此我理解了基本语法。
我有一个Object
类型的2D数组。 (X
代表什么值,Y
是什么记录)它在第0列和第1列中存储两个字符串,在{2}中存储MessageBoxIcon
,在3中存储MessageBoxButtons
。
我希望能够交换两条记录。
每次对数组进行更改时,我都会使用第1列填充listBox。 (使用循环)我很满意这个系统。 我已将+和 - 按钮放在listBox的一侧,但我无法弄清楚如何在其后面执行代码。
我想要它,这样当我点击+按钮时,它会将当前选定的记录碰到一条记录。 (I.E.它减少它的Y位置并增加其上方记录的Y坐标)它需要碰撞与该记录相关的所有值。
有人能为我提供这样做的功能吗?
我希望我能够很好地解释这一点。
答案 0 :(得分:1)
这需要以旧方式完成,以交换两个变量的值:
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;
}
}
这可以推广到处理任意下界。