簡體   English   中英

例外:在 Linq 查詢中進行類型轉換時,可空對象必須具有值

[英]Exception: Nullable object must have a value while typecasting in a Linq query

我有一個 Linq 聲明如下

if (!inspectionItemIds.Contains((int)item.InspectionItemId)) {
    inspectionItemIds.Add((int)item.InspectionItemId);
}

並且 item.InspectionItemId 為 null 並且它拋出我的異常如下:

System.InvalidOperationException
  HResult=0x80131509
  Message=Nullable object must have a value.
  Source=mscorlib
  StackTrace:
   at System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource)
   at System.Nullable`1.get_Value()
   at IMS.Model.DomainLogic.ViolationManager.<>c__DisplayClass19_0.<ViolationsFor>b__9(Violation item) in C:\SourceCode\IMS\Development\IMS\IMS.Model\DomainLogic\ViolationManager.cs:line 254
   at System.Collections.Generic.List`1.ForEach(Action`1 action)
   at IMS.Model.DomainLogic.ViolationManager.ViolationsFor(String for, Int32 id) in C:\SourceCode\IMS\Development\IMS\IMS.Model\DomainLogic\ViolationManager.cs:line 253
   at IMS.Web.Controllers.CaseController.Details(Int32 id, Boolean isPrint) in C:\SourceCode\IMS\Development\IMS\IMS.Web\Controllers\CaseController.cs:line 382
   at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
   at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c.<BeginInvokeSynchronousActionMethod>b__9_0(IAsyncResult asyncResult, ActionInvocation innerInvokeState)
   at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult)
   at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End()
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult)
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass11_0.<InvokeActionMethodFilterAsynchronouslyRecursive>b__0()
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass11_2.<InvokeActionMethodFilterAsynchronouslyRecursive>b__2()

任何幫助解決這些類型的問題? 任何幫助都會非常有幫助 - 提前致謝。

inspectionItemIds聲明為List<int>並將item.InspectionItemIdint?

您可以測試item.InspectionItemId並將其轉換為具有模式匹配的int ,然后再使用Contains進行測試

if (item.InspectionItemId is int id && !inspectionItemIds.Contains(id)) {
    inspectionItemIds.Add(id);
}

它使您不必進行兩次強制轉換並同時測試它是否不為空。

這是我解決它的方法,非常感謝所有來幫助我的人 - 非常感謝。

 violations.ToList().ForEach(item =>
            { if ((item.InspectionItemId != null) && !inspectionItemIds.Contains((int)item.InspectionItemId)) inspectionItemIds.Add((int)item.InspectionItemId); });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM