[英]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.InspectionItemId
為int?
:
您可以測試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.