为什么Visual Studio在.Net Core上的工作WebAPI代码中报告lambda错误?

Thi*_*iro 6 c# resharper lambda visual-studio asp.net-core

我将一个WebAPI从FullDotnet(4.6)迁移到.Net Core 2.0,我在使用Dapper的数据层中遇到了这个问题.

我的代码:

public List<Doctor> GetList()
{
    List<Doctor> ret;
    using (var db = GetMySqlConnection())
    {
        const string sql = @"SELECT D.Id, D.Bio, D.CRMState, D.CRMNumber,
        U.Id, U.Email, U.CreatedOn, U.LastLogon, U.Login, U.Name, U.Phone, U.Surname, U.Id, U.Birth, U.CPF,
        S.Id, S.Name
        from Doctor D
        inner join User U on U.Id = D.UserId
        inner join Speciality S on S.Id = D.IDEspeciality
        order by D.Id DESC";

        ret = db.Query<Doctor, User, Speciality, Doctor>(sql, (doctor, user, speciality) =>
        {
            doctor.User = user;
            doctor.Speciality = speciality;
            return doctor;
        }
        , splitOn: "Id, Id", commandType: CommandType.Text).ToList();
    }
    return ret;
}
Run Code Online (Sandbox Code Playgroud)

奇怪的行为:

来自代码的PrintScreen

解决方案构建和工作 VisualStudio突出显示的"错误"是:

参数类型'System.Func`5'不能赋予参数类型'lambda expression'

我有另一个具有相同行为和相同错误的类,但是,再次,代码编译和工作,但这个"错误突出显示"很烦人!

我在运行.NET Framework 4.6的旧解决方案中没有这个亮点

有用的信息:

  • 类库:.Net Standard 2.0
  • Visual Studio 2017 v15.4.1
  • Resharper 2017.2

Sza*_*zsi 4

正如我们在评论中发现的那样,该问题是由 ReSharper (2017.2) 引起的。

当怀疑 ReSharper 出现问题时,您可以采取一些额外的步骤。

暂停/恢复 ReSharper

为了确认 ReSharper 导致问题,您可以使用以下命令暂停它:

Tools/Options.../Resharper node/Suspend now

在这种情况下,执行暂停/恢复周期就足够了并解决了问题。

清除 ReSharper 缓存来源

损坏的缓存会影响 ReSharper 的行为。例如,ReSharper 可以停止解析符号,或者某些导航命令可能不可用。如果您注意到这种奇怪的行为,清除当前解决方案的缓存在大多数情况下可能会有所帮助。

清除当前解决方案的缓存

  1. 在 Visual Studio 中打开据称缓存已损坏的解决方案。
  2. 开放环境 | ReSharper 选项的常规页面。
  3. 单击清除缓存。请注意,只会清理当前选定的缓存位置中的缓存。
  4. 重新打开您的解决方案以使更改生效。

如果特定解决方案超过 30 天未打开,ReSharper 还会自动清理解决方案缓存。

如果以上方法不起作用怎么办?

如果您确认这是 ReSharper 问题,那么您应该首先尝试更新到最新版本的 ReSharper 并尝试重现您的问题。

如果问题仍然存在,那么您应该前往JetBrains 错误跟踪器,并在确认这不是已报告的错误后提交问题。

  • 干杯我的朋友! (2认同)