你的if語句有點多餘。此外,員工姓名或收費號碼是否獨一無二?如果是這樣,一個.Single()語句會更合適。如果它們不是唯一的,我只需執行以下操作:
var hours = employeeHours.Where(x => x.EmployeeName == newHours.EmployeeName && x.ChargeNumber == newHours.ChargeNumber)?.FirstOrDefault()?.TotalHours;
if (hours != null)
sheet.Cells[row, 5] = hours;
請注意使用空條件運算符?。 FirstOrDefault()方法之前和之後。如果沒有符合條件的條目,或者條目的TotalHours屬性爲空,這將基本上防止拋出空的異常錯誤。您也可以使用First()並將其包裝在try catch塊中,因爲如果沒有找到條目,則First()拋出錯誤(如果沒有找到條目,FirstOrDefault()將設置值爲null)。這裏的try/catch語句的方法:
try
{
sheet.Cells[row, 5] = employeeHours.Where(x => x.EmployeeName == newHours.EmployeeName && x.ChargeNumber == newHours.ChargeNumber).First().TotalHours;
}
catch (Exception)
{
// handle errors here
throw;
}
更新:由於兩個EmployeeName和ChargeNumber做出一個唯一的ID彼此一起使用時,我會更新你的代碼如下:
var hours = employeeHours.SingleOrDefault(x => x.EmployeeName == newHours.EmployeeName && x.ChargeNumber == newHours.ChargeNumber)?.TotalHours;
if (hours != null)
sheet.Cells[row, 5] = hours;
這個問題看起來像一個代碼審查代碼,而不是一個SO問題 – Tola