2012-08-27 16 views
4

有了这个代码:如何避免这种潜在的“写操作运行时异常”?

for (int row = 0; row < PlatypusGridRowCount; row++) { 
    // Save each row as an array 
    var currentRowContents = new string[ColumnCount]; 
    // Add each column to the currentColumn 
    for (int col = 0; col < ColumnCount; col++) { 
     currentRowContents[col] = this.GetPlatypusValForCell(row, col); 
} 
// Add the row to the DGV 
dataGridViewPlatypus.Rows.Add(currentRowContents); 

ReSharper的说,最后一行:“从string []联合变量数组转换为一个对象[]可能会导致在写入操作运行时异常”

所以我让它做就是了变化(“更改类型局部变量的反对[] ...”),这样的代码变得这样:

... 
    object[] currentRowContents = new string[ColumnCount]; 
... 

然后,当我重新运行ReSharper的检查,我得到的从Resharper(“Co-va从string [] riant数组转换为一个对象[]可能会导致在写入操作运行时异常“),但这次上线:

object[] currentRowContents = new string[ColumnCount]; 

我再让它重新做它的事(”变型局部变量的String [] ...“)

...所以这改变了行:

string[] currentRowContents = new string[PLATYPUS_COL_COUNT]; 

...(IOW,它改变了它回到了第一个版本,但与显式而非隐式字符串数组声明);但ReSharper的的后续运行将要我换的String []为VAR等

回答

2

如果没有其他原因currentRowContents是一个字符串数组,你可以声明为var currentRowContents = new object[ColumnCount];从而消除了共同变量数组转换

**或只是读前嫌的答案,这是一样的而是由一个更快的打字员写的)

3

我觉得它想要

object[] currentRowContents = new object[ColumnCount] 

如果你给的东西一个字符串[]是希望一个Object [],将某个对象分配给该数组是合法的。所以你的代码在编译时是合法的,但是在运行时可能会抛出异常(如果字符串以外的东西被分配给数组元素)。

5

你的代码是绝对完美的,而数组用来从中检索数据。

不幸的是,ReSharper无法检测到是否有写入该数组(全局程序验证在计算机科学目前尚未解决的问题:)),如果有数组元素的赋值,程序将抛出异​​常运行时,如果除了字符串被分配给。