请进一步了解主要更新!
我有一些像这样的代码:
void Test(IEnumerable x)
{
var dynX = x.Cast<dynamic>();
var result = dynX.Select(_ => _.Text);
}
Run Code Online (Sandbox Code Playgroud)
在针对.NET 4.5的现有库项目中.VS2015的IntelliSense强调了这一Text部分,抱怨说:'object'不包含'Text'的定义......
果然,编译失败了
错误CS1061:'object'不包含'Text'的定义,也没有扩展方法'Text'可以找到'object'类型的第一个参数(你是否缺少using指令或汇编引用?)
这条消息总是说'object',即使我将演员.Cast<IAsyncResult>()阵容改为或诸如此类.当我将lambda参数悬停时,工具提示会显示它的类型IColumn(存在但不相关).再说一遍,无论我演绎什么类型.
但是,当我悬停Select()方法时,它正确显示参数为Func<dynamic, dynamic>.如果我明确指定lambda参数类型,它会编译.如果我明确指定类型参数Select(),它也可以工作.
LINQ的其他用法dynamic正在发挥作用.当我将此方法复制到解决方案中的另一个(现有)项目时,它也会编译.当我将它复制到同一项目中的另一个文件时,它不会编译.
它也与VS2013一起编译.
在Windows 8.1和Windows 10中,所有同事都会出现同样的错误.
也许这是类型推断的一些奇怪的问题......?
我试过的东西没有帮助:
更新
好吧,我设法创建了一个自包含的最小失败的例子:
static class Program
{
static void Main(string[] args)
{
IEnumerable x = new object[0];
IEnumerable<dynamic> dynX = x.Cast<dynamic>();
// CS1061 'object' does not contain …Run Code Online (Sandbox Code Playgroud) c# extension-methods type-inference dynamic visual-studio-2015