2012-08-27 55 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無法檢測到是否有寫入該數組(全局程序驗證在計算機科學目前尚未解決的問題:)),如果有數組元素的賦值,程序將拋出異​​常運行時,如果除了字符串被分配給。