VS隐藏了扩展函数调用中缺少类型的错误?

时间:2016-12-23 15:24:50

标签: c# generics roslyn

我们必须在代码中找到一个非常讨厌的问题:

void Test()
{
    string queryString = @"...";
    MySqlDataAdapter adapter = new MySqlDataAdapter(queryString, Connection);

    DataSet contacts = new DataSet();
    adapter.Fill(contacts, "employees");

    var contactList = new List<Contact>();
    foreach (DataRow item in contacts.Tables["employees"].Rows)
    {
        var foo = new Contact
        {
            Id = item.Field<int>("ID"),
            // ...
            LastChanged = item.Field<>("ID");
        };
    }

    return contactList;
}

请参阅第16行中的那些空角括号?那些当然是一个错误,应该已经填补,因为System.Data.DataRowExtensions.Field<T>是一种通用的扩展方法,其中类型是不可推断的。

由于某些原因,Visual Studio(2015,Update 3)在该行中未显示错误。然而,在编译时,我遇到了这个可怕的无用错误:

CS7038: Failed to emit module '<assembly name here>'.

...没有提及失败的文件或行。填写类型的课程修复了这个,但它似乎更像是编译器错误?我可以在VS的两个不同的计算机/安装上重现这个。

我是否会忽视某些内容,或者这是我应该报告的错误?

1 个答案:

答案 0 :(得分:2)

经过一些测试后,在省略通用扩展方法的类型信息时似乎是一个编译器错误。报告的问题和可重复的代码可以找到here