爲避免該異常首先檢查你的對象不是空試圖調用它們的方法之前。檢查...
dataTABLE != null
Cells[0].Value != null
Cells[1].Value != null
這就是說,你問了最好的方式來完成任務,所以這裏有一些其他的事情要考慮。
您可以使用諸如dataTable.AsEnumerable().Any(dr => ...);
之類的內容遍歷數據表,以查看是否存在符合您的條件的行。
當你需要字符串比較其他字符串或對象可能爲空,你需要仔細考慮你的要求和什麼空引用意味着你。
如果cell[0].value == null
你還想繼續比較MyServerChecked
嗎?如果cell[0].value == null
和MyServerChecked == null
那麼他們應該被認爲是平等的?
同樣,你想如何處理空弦?應該認爲空字符串是否等於null?
以下是一個簡單的解決方案。如果單元格爲空,則不會嘗試比較它們。這可能不是你想要的行爲,但就像我說的,想一想什麼空值和空字符串意味着你的特定場景和代碼相應地。
string MyServerChecked = "Something";
string ServiceName = service.ServiceName.ToString();
if (dataTable != null)
{
foreach (DataGridViewRow row in dataTable.Rows)
{
if (row.Cells[0].Value != null
&& row.Cells[1].Value != null
&& string.Equals(row.Cells[0].Value.ToString(), MyServerChecked, StringComparison.OrdinalIgnoreCase)
&& string.Equals(row.Cells[1].Value.ToString(), ServiceName, StringComparison.OrdinalIgnoreCase))
{
// Row already exists...
}
}
}
使用重載string.Equals
方法有StringComparison
枚舉類型意味着你不必轉換爲大寫自己。它還爲您提供一些額外的文化設置選項。有關詳細信息,請參閱MSDN上的StringComparison Enumeration。
「寫入表格前」是什麼意思?您已經通過dataTABLE.Rows集合進行了遊戲。如果你在所有行上都需要一些條件,你可以迭代'dataTable.Rows.Where(某些lambda條件)'。你也可以使用'Distinct'擴展方法。你沒有提供任何代碼,你會檢查行是否重複,只是一個條件。另外 - 調用'service.ServiceName。ToString()'是無效的 - 爲什麼每次迭代都要處理字符串? – Tarec