private ArrayList getListValue(object obj, CellExt leftHead, CellExt topHead, bool dispValue) { ArrayList o = null; if (obj is ArrayList) { o = (ArrayList)obj; } else if (obj is CSVar) { CSVar var = (CSVar)obj; CellExt source = var.Source; CellExt ext2 = var.LeftHead; CellExt ext3 = var.TopHead; CellExt ext4 = ext2.Source; CellExt ext5 = ext3.Source; if (((leftHead == null) || !ext4.isLeftHeadOf(leftHead.Source)) || !leftHead.Source.isLeftHeadOf(source)) { leftHead = ext2; } if (((topHead == null) || !ext5.isTopHeadOf(topHead.Source)) || !topHead.Source.isTopHeadOf(source)) { topHead = ext3; } o = var.getCells(leftHead, topHead, null); } else { o = new ArrayList(1); o.Add(obj); } return((ArrayList)ConvertTool.getValue(o, dispValue)); }
public override object calculate() { if (base.unit_0 == null) { throw new ReportError("位移函数[]左操作数为空"); } object obj3 = base.unit_0.calculate(); if (!(obj3 is CSVar)) { throw new ReportError("位移函数[]左操作数应为单元格"); } CSVar var = (CSVar)obj3; CellExt source = var.Source; if (!this.bool_0) { int num6 = this.arrayList_0.Count; int num2 = this.arrayList_1.Count; CellExt current = base.cs.Current; CellExt leftHead = current.getLeftHead(); CellExt topHead = current.getTopHead(); for (int i = 0; i < num6; i++) { GClass1 class3 = (GClass1)this.arrayList_0[i]; int index = 0; if (class3.source == null) { if (source.ExtCells != null) { class3.source = source; } else { class3.source = source.getLeftHead(); } } CellExt ext6 = current.getLeftHead(class3.source); switch (class3.type) { case 0: index = class3.position; break; case 1: if (ext6 == null) { throw new ReportError("位移对象超出范围"); } index = ext6.Position + class3.position; break; case 2: if (ext6 == null) { throw new ReportError("位移对象超出范围"); } index = ext6.Position; break; } if (class3.source.isLeftHeadOf(leftHead.Source)) { leftHead = leftHead.getLeftHead(class3.source); } else { leftHead = leftHead.getSubCell(class3.source); } if (leftHead == null) { return(null); } leftHead.testValue(); leftHead = leftHead.getExtCell(index); if (leftHead == null) { return(null); } } for (int j = 0; j < num2; j++) { GClass1 class2 = (GClass1)this.arrayList_1[j]; int position = 0; if (class2.source == null) { if (source.ExtCells == null) { class2.source = source.getTopHead(); } else { class2.source = source; } } CellExt ext4 = current.getTopHead(class2.source); switch (class2.type) { case 0: position = class2.position; break; case 1: if (ext4 == null) { throw new ReportError("位移对象超出范围"); } position = ext4.Position + class2.position; break; case 2: if (ext4 == null) { throw new ReportError("位移对象超出范围"); } position = ext4.Position; break; } if (class2.source.isTopHeadOf(topHead.Source)) { topHead = topHead.getTopHead(class2.source); } else { topHead = topHead.getSubCell(class2.source); } if (topHead == null) { return(null); } topHead.testValue(); topHead = topHead.getExtCell(position); if (topHead == null) { return(null); } } return(new CSVar(source, leftHead, topHead)); } return(this.method_0(source, this.int_1, this.int_2)); }