C# System.ArgumentNullException:System.Linq.Enumerable.Any处的值不能为null
我收到此代码的错误:C# System.ArgumentNullException:System.Linq.Enumerable.Any处的值不能为null,c#,C#,我收到此代码的错误: if (!App.selectedPhrases.Any()) 以下是错误消息: Xamarin异常堆栈:System.ArgumentNullException:值不能为空 无效的参数名称:System.Linq.Enumerable.Any[TSource]处的源 (System.Collections.Generic.IEnumerable`1[T]源)[0x0000d]在 :0 at 中的Japanese.DeckTabViewModel.ShowFirstMes
if (!App.selectedPhrases.Any())
以下是错误消息:
Xamarin异常堆栈:System.ArgumentNullException:值不能为空
无效的参数名称:System.Linq.Enumerable.Any[TSource]处的源
(System.Collections.Generic.IEnumerable`1[T]源)[0x0000d]在
:0 at
中的Japanese.DeckTabViewModel.ShowFirstMessageAsync()[0x00029]
:0 at
Japanese.DeckTabViewModel.OnAppearing()[0x0006c]位于
:0 at
日语中的Japanese.DeckTabPage.onappering()[0x0006d]
:0 at
System.Runtime.CompilerServices.AsyncMethodBuilderCore+c.b\u 7\u 0
中的(System.Object状态)[0x00000]
:0 at
Android.App.SyncContext+c_uuuu显示类2_0.b_uu0()[0x00000]
in:0 at
中的Java.Lang.Thread+RunnableImplementor.Run()[0x00008]
:0 at
Java.Lang.IRunnableInvoker.n_运行(System.IntPtr jnienv,System.IntPtr
本机\uuu此[0x00009]位于:0处
(包装器动态方法)
Android.Runtime.DynamicMethodNameCounter.34(intptr,intptr)
是否有人对可能发生的事情有任何想法,我如何在异常中找到准确的行号,以及我如何解决这个问题
特别是我对stacktrace没有显示任何行号感到困惑。有人知道这是为什么吗
还有一个问题。我怎么能避免在这里使用“!”呢?因为我觉得这很令人困惑 您必须在
selectedPhrases
上检查null
,
使用
在C#6及更高版本中可用,空条件运算符应用
对其操作数的成员访问、、、或元素访问、[]操作
仅当该操作数的计算结果为非空时;否则,它将返回
空
但是,由于提升,您必须在if条件下明确指定false
或者,如果您想在条件中明确检查null
,可以使用短路()
条件逻辑或运算符| |,也称为
“短路”逻辑OR运算符,计算其逻辑OR
操作数。如果x或y的计算结果为
对。否则,结果为假如果x的计算结果为true,则y不是
评估
最有可能的是
App.selectedPhrases
为空。对于第一个问题,使用App.selectedPhrases?.Any()
对于第二个问题,如果(App.selectedPhrases.Any()==true)或如果(App.selectedPhrases.Any()!=true)
没有给出准确的行号,则可以执行,该错误提示问题的来源Japanese.DeckTabViewModel.ShowFirstMessageAsync()=>Japanese.DeckTabViewModel.OnAppearing()=>Japanese.DeckTabPage.OnAppearing()
是否存在async void
?它可以在设置成员之前在单独的线程上执行。这让我相信这可能是一个错误。
if(App.selectedPhrases?.Any() == false)
if(App.selectedPhrases == null || !App.selectedPhrases.Any())