var rows = conn.Query("SELECT * FROM T WHERE ID = @id",new { id = tableId }); var row = rows.FirstOrDefault();
这里的行是IEnumerable< dynamic>类型. IntelliSense称FirstOrDefault()是等待的,其用途等待FirstOrDefault().并非所有LINQ查询都显示为等待,但似乎特别是那些单独输出元素的查询.
一旦我改为使用强类型,这种行为就会消失.
是因为.NET无法知道您在运行时接收的类型是否等待,以便它“允许”它,以防您需要它?但是不强制执行吗?或者我应该,由于一些动态语言运行时行为,实际上在这里使用等待?
我一直在搜索,但没有在网上找到最小的东西.
解决方法
> bool IsCompleted {get; }
> void | TResult GetResult()
可以等待.
您可以在编译时(从docs开始)在动态类型上调用您想要的任何内容:
At compile time,an element that is typed as dynamic is assumed to support any operation.
这就是编译器在编译时没有显示任何警告/错误的原因,但在运行时,您将得到类似于以下内容的异常:
RuntimeBinderException.
‘<>f__AnonymousType0’ does not contain a deFinition for ‘GetAwaiter’
如果指定类型显式编译器将搜索方法GetAwaiter.然后,如果您的强类型不包含它,您将得到编译时错误.
所以,你的问题的答案确实是因为动态的特殊行为.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。