1

我对 .NET 很陌生,所以请多多包涵。

IEnumerable我对in LinqToTwitter有一个奇怪的问题。
该查询返回一个IEnumerable,并且 aConsole.WriteLine表明它拥有两个帖子。
但是,当我尝试调用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();

谢谢您的帮助


堆栈跟踪

   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()
4

1 回答 1

5

您的Console.WriteLine输出表明Enumerator是 [Status,Status] 类型的泛型,而不是它包含两个元素。您收到的异常是执行初始查询的结果,而不是您可能认为的遍历枚举器的结果。如果您要将您的状态分配更改为:

IEnumerable<Status> statuses =
(from tweet in ctx.Status
select tweet).ToList();

您将看到异常现在发生在分配行上,而不是MoveNext()行上。

我很感激这并没有告诉您为什么会遇到异常,这可能是由于您的 ctx 实例的 Status 集合的映射或填充失败造成的,但希望它可以帮助您进行调试。

干杯

于 2013-02-18T10:02:53.970 回答