我在c#中有一个基于1的数组(通过调用Excel范围的get_Value生成我得到一个2D数组,例如
object[,] ExcelData = (object[,]) MySheet.UsedRange.get_Value(Excel.XlRangeValueDataType.xlRangeValueDefault);
Run Code Online (Sandbox Code Playgroud)
这显示为一个数组,例如ExcelData [1..20,1..5]
有什么方法可以告诉编译器对此进行rebase,这样我就不需要在整个时间内向循环计数器添加1?
List<string> RowHeadings = new List<string>();
string [,] Results = new string[MaxRows, 1]
for (int Row = 0; Row < MaxRows; Row++) {
if (ExcelData[Row+1, 1] != null)
RowHeadings.Add(ExcelData[Row+1, 1]);
...
...
Results[Row, 0] = ExcelData[Row+1, 1];
& other stuff in here that requires a 0-based Row
}
Run Code Online (Sandbox Code Playgroud)
它使得事物的可读性降低,因为创建用于写入数组的数组将基于零.
我在函数中的Debug.Assert ine有以下问题
public override ReportErrorLevel GenerateResults(bool reformat) {
...
for (int Col = MinResultsCol; Col < MaxResultsCol + 1; Col++) {
try {
ReportColumnTitle ColTitle = ColumnInfo[Col];
#if DEBUG
Debug.Assert(ColTitle.BreakOnGenerate, "...");
#endif
...
} catch ...
}
}
Run Code Online (Sandbox Code Playgroud)
我使用这个,以便我可以在列中设置一个值,然后运行一个报告,当系统到达它中断的列时.
我遇到没有被捕获的情况,但是当我在循环之前设置一个无条件断点,然后一旦达到它就运行,然后捕获断言(在这种情况下是第15次循环).
(#if DEBUG就在那里,因为ReportColumnTitle.BreakOnGenerate也在#if DEBUG部分) - 我不是要求查看这是否正确:)
除了设置断点之外,这是不一致的,然后似乎每次都正确地抛出断言.
有任何想法吗?