gpt4 book ai didi

c# - 如何在 C# 中处理和识别 System.ArgumentOutOfRangeException?

转载 作者:太空宇宙 更新时间:2023-11-03 12:10:11 26 4
gpt4 key购买 nike

我有一个使用 C# 的基于 Xamarin 的应用程序。我有一个页面 EmployeeProfile。此页面列出了所有员工。有一次提供 10 条记录的 API 调用。当用户向下滚动并且最后一个项目开始出现时,它调用 Loadmore 方法,该方法为另外 10 条记录调用 API。

我使用 AppCenter 来跟踪错误和崩溃。当我检查我的实例时,我没有收到错误。但是,当我查看 AppCenter 崩溃报告时,此页面上有很多崩溃。

Exception: ThrowHelper.ThrowArgumentOutOfRangeException (System.ExceptionArgument argument, System.ExceptionResource resource) System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index

错误看起来像在 getEmployeeProfile() 方法中。谁能建议我哪一行导致了这个问题,我该如何预防?如果无法预防,我该如何处理?

代码:

publish SearchEmployeeResultsViewModel
{
public ObservableRangeCollection<EmployeeProfile> SearchEmployee { get; set; }
public List<EmployeeProfile> ListSearchEmployee { get; set; }
public bool IsNoDataFound { get; set; }
public int currentPage { get; set; }
public int recordCount { get; set; }
public bool IsBusy { get; set; }

//constructor
public SearchEmployeeResultsViewModel()
{
currentPage = 0;
recordCount = 10;
getEmployeeProfile();
}

//Call when user scroll down for more EmployeeProfiles
//Following method call when last item start to visible(ListView event)
private async Task LoadMore()
{
IsBusy = true;
await getEmployeeProfile();
IsBusy = false;
}

//Except/Crash raised from here
private async Task getEmployeeProfile()
{
currentPage++;
//Remove last item if it has no username
//Purpose: We add blank item at end to manage smooth scrolling while getting next page data
if (SearchEmployee.Count > 0 && SearchEmployee.Last().UserName == null)
SearchEmployee.RemoveAt(SearchEmployee.Count() - 1);

ListSearchEmployee.AddRange((await _profileApiClient.SearchEmployeeCall(currentPage, recordCount)));

var differenceList = ListSearchEmployee.Except(SearchEmployee).ToList();

if (differenceList.Count > 0)
{
SearchEmployee.AddRange(differenceList);
//add blank item
SearchEmployee.Add(new EmployeeProfile());
}
IsNoDataFound = (SearchEmployee == null || SearchEmployee.Count() == 0);
}
}

错误堆栈跟踪:

ThrowHelper.ThrowArgumentOutOfRangeException (System.ExceptionArgument argument, System.ExceptionResource resource)
System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index

ThrowHelper.ThrowArgumentOutOfRangeException (System.ExceptionArgument argument, System.ExceptionResource resource)
ThrowHelper.ThrowArgumentOutOfRangeException ()
List`1[T].get_Item (System.Int32 index)
Collection`1[T].get_Item (System.Int32 index)
ReadOnlyCollection`1[T].get_Item (System.Int32 index)
RendererPool.UpdateRenderers (Xamarin.Forms.Element newElement)
RendererPool.UpdateNewElement (Xamarin.Forms.VisualElement newElement)
VisualElementPackager.SetElement (Xamarin.Forms.VisualElement oldElement, Xamarin.Forms.VisualElement newElement)
VisualElementPackager.OnRendererElementChanged (System.Object sender, Xamarin.Forms.Platform.iOS.VisualElementChangedEventArgs args)
VisualElementRenderer`1[TElement].OnElementChanged (Xamarin.Forms.Platform.iOS.ElementChangedEventArgs`1[TElement] e)
VisualElementRenderer`1[TElement].SetElement (TElement element)
IVisualElementRenderer.SetElement (Xamarin.Forms.VisualElement element)
RendererPool.UpdateRenderers (Xamarin.Forms.Element newElement)
RendererPool.UpdateNewElement (Xamarin.Forms.VisualElement newElement)
VisualElementPackager.SetElement (Xamarin.Forms.VisualElement oldElement, Xamarin.Forms.VisualElement newElement)
VisualElementPackager.OnRendererElementChanged (System.Object sender, Xamarin.Forms.Platform.iOS.VisualElementChangedEventArgs args)
VisualElementRenderer`1[TElement].OnElementChanged (Xamarin.Forms.Platform.iOS.ElementChangedEventArgs`1[TElement] e)
VisualElementRenderer`1[TElement].SetElement (TElement element)
IVisualElementRenderer.SetElement (Xamarin.Forms.VisualElement element)
RendererPool.UpdateRenderers (Xamarin.Forms.Element newElement)
RendererPool.UpdateNewElement (Xamarin.Forms.VisualElement newElement)
VisualElementPackager.SetElement (Xamarin.Forms.VisualElement oldElement, Xamarin.Forms.VisualElement newElement)
VisualElementPackager.OnRendererElementChanged (System.Object sender, Xamarin.Forms.Platform.iOS.VisualElementChangedEventArgs args)
VisualElementRenderer`1[TElement].OnElementChanged (Xamarin.Forms.Platform.iOS.ElementChangedEventArgs`1[TElement] e)
VisualElementRenderer`1[TElement].SetElement (TElement element)
IVisualElementRenderer.SetElement (Xamarin.Forms.VisualElement element)
RendererPool.UpdateRenderers (Xamarin.Forms.Element newElement)
RendererPool.UpdateNewElement (Xamarin.Forms.VisualElement newElement)
VisualElementPackager.SetElement (Xamarin.Forms.VisualElement oldElement, Xamarin.Forms.VisualElement newElement)
VisualElementPackager.OnRendererElementChanged (System.Object sender, Xamarin.Forms.Platform.iOS.VisualElementChangedEventArgs args)
VisualElementRenderer`1[TElement].OnElementChanged (Xamarin.Forms.Platform.iOS.ElementChangedEventArgs`1[TElement] e)
VisualElementRenderer`1[TElement].SetElement (TElement element)
IVisualElementRenderer.SetElement (Xamarin.Forms.VisualElement element)
ViewCellRenderer+ViewTableCell.UpdateCell (Xamarin.Forms.ViewCell cell)
ViewCellRenderer+ViewTableCell.set_ViewCell (Xamarin.Forms.ViewCell value)
ViewCellRenderer.GetCell (Xamarin.Forms.Cell item, UIKit.UITableViewCell reusableCell, UIKit.UITableView tv)
CustomViewCellRenderer.GetCell (Xamarin.Forms.Cell item, UIKit.UITableViewCell reusableCell, UIKit.UITableView tv)
CellTableViewCell.GetNativeCell (UIKit.UITableView tableView, Xamarin.Forms.Cell cell, System.Boolean recycleCells, System.String templateId)
ListViewRenderer+ListViewDataSource.GetCell (UIKit.UITableView tableView, Foundation.NSIndexPath indexPath)
(wrapper managed-to-native) ObjCRuntime.Messaging:objc_msgSend (intptr,intptr)
UITableView.EndUpdates ()
ListViewRenderer.UpdateItems (System.Collections.Specialized.NotifyCollectionChangedEventArgs e, System.Int32 section, System.Boolean resetWhenGrouped)
ListViewRenderer.OnCollectionChanged (System.Object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
TemplatedItemsList`2[TView,TItem].OnCollectionChanged (System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
TemplatedItemsList`2[TView,TItem].OnProxyCollectionChanged (System.Object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e, System.Boolean fixWindows)
TemplatedItemsList`2[TView,TItem].OnProxyCollectionChanged (System.Object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
ListProxy.OnCollectionChanged (System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
ListProxy+<>c__DisplayClass33_0.<OnCollectionChanged>b__0 ()
ListProxy.OnCollectionChanged (System.Object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
ListProxy+WeakNotifyProxy.OnCollectionChanged (System.Object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
ObservableCollection`1[T].OnCollectionChanged (System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
ObservableRangeCollection`1[T].OnCollectionChanged (System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
ObservableCollection`1[T].OnCollectionChanged (System.Collections.Specialized.NotifyCollectionChangedAction action, System.Object item, System.Int32 index)
ObservableCollection`1[T].InsertItem (System.Int32 index, T item)
Collection`1[T].Add (T item)
SearchEmployeeResultsViewModel+<getEmployeeProfile>d__76.MoveNext ()
ExceptionDispatchInfo.Throw ()
TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task)
TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task)
TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task)
TaskAwaiter.GetResult ()
SearchEmployeeResultsViewModel+<LoadMore>d__75.MoveNext ()
ExceptionDispatchInfo.Throw ()
AsyncMethodBuilderCore+<>c.<ThrowAsync>b__6_0 (System.Object state)
UIKitSynchronizationContext+<Post>c__AnonStorey0.<>m__0 ()
NSAsyncActionDispatcher.Apply ()
(wrapper managed-to-native) UIKit.UIApplication:UIApplicationMain (int,string[],intptr,intptr)
UIApplication.Main (System.String[] args, System.IntPtr principal, System.IntPtr delegate)
UIApplication.Main (System.String[] args, System.String principalClassName, System.String delegateClassName)
Application.Main (System.String[] args)

最佳答案

Error looks like in getEmployeeProfile() method. Can anybody please suggest me which line cause this issue....

根据您的堆栈跟踪,此行发生错误:

SearchEmployee.Add(new EmployeeProfile());

... how can I prevent it?

原因 似乎是绑定(bind)的 UI 控件试图遍历已更改的列表。如需更多帮助,您必须包括设计代码或绑定(bind)到此属性的代码。这是基于您发布的堆栈跟踪中的前 5 行。


On the UI side, there is a ListView. ListView binds to SearchEmployee. Is there any way to prevent it or handle it

看起来像是一个已报告的错误,请参阅 Bug 59974 - ArgumentOutOfRangeException in listview with ObservableCollection async Updates .

关于c# - 如何在 C# 中处理和识别 System.ArgumentOutOfRangeException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52757918/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com