IEnumerator给出null异常,但不是null
本文关键字:null 异常 给出 IEnumerator | 更新日期: 2023-09-27 17:59:46
我对.NET还很陌生,所以请耐心等待。
LinqToTwitter中的IEnumerable
有一个奇怪的问题
查询返回一个IEnumerable
,而Console.WriteLine
表示它拥有两个post
但是,当我尝试在枚举器上调用MoveNext()
时,我会得到一个空指针异常。
代码
TwitterContext ctx = this.twitterContext;
IEnumerable<Status> statuses =
from tweet in ctx.Status
.AsEnumerable()
select tweet;
IEnumerator<Status> eStat = statuses.GetEnumerator();
// The output is:
// System.Linq.Enumerable+WhereSelectEnumerableIterator`2[LinqToTwitter.Status,LinqToTwitter.Status]
// So this shows that the IEnumerable holds 2 status values
Console.WriteLine(eStat);
// This line gives the exception
// "Value cannot be null."
Boolean hasNext = eStat.MoveNext();
感谢的帮助
Stacktrace
at System.Reflection.RuntimeMethodInfo.MakeGenericMethod(Type[] methodInstantiation)
at LinqToTwitter.TwitterQueryProvider.Execute[TResult](Expression expression)
at LinqToTwitter.TwitterQueryable`1.GetEnumerator()
at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at Broadcast.TwitterFeed.Program.Main(String[] args) in C:'Daten'TFS-Workspace'GD-TOP'Broadcast'Broadcast.TwitterFeed.Service'Broadcast.TwitterFeed'Program.cs:line 20
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
您的Console.WriteLine
输出表明Enumerator
是[Status,Status]类型的泛型,而不是它包含两个元素。您收到的异常是执行初始查询的结果,而不是像您可能认为的那样在枚举器中循环。如果您要将状态分配更改为:
IEnumerable<Status> statuses =
(from tweet in ctx.Status
select tweet).ToList();
您将看到异常现在发生在赋值行,而不是MoveNext()
行。
我很感激这并不能告诉你为什么会出现异常,这可能是由于ctx实例的Status集合的映射或填充失败造成的,但希望它能帮助你在调试过程中取得进展。
干杯