不要使用'System.Runtime.CompilerServices.DynamicAttribute

本文关键字:Runtime CompilerServices DynamicAttribute System | 更新日期: 2023-09-27 18:13:32

我复制并粘贴了WebMatrix.WebData.IDatabase的源代码,但VStudio标记动态单词并表示

不要使用'System.Runtime.CompilerServices.DynamicAttribute'。使用关键字改为'dynamic'

为什么我得到这个错误时,原来的。net框架使用它?

源代码在这里:

namespace WebMatrix.WebData
{
    using System;
    using System.Collections.Generic;
    using System.Runtime.CompilerServices;
    internal interface IDatabase : IDisposable
    {
        int Execute(string commandText, params object[] args);
        [return: Dynamic(new bool[] { false, true })]
        IEnumerable<object> Query(string commandText, params object[] parameters);
        [return: Dynamic]
        object QuerySingle(string commandText, params object[] args);
        [return: Dynamic]
        object QueryValue(string commandText, params object[] parameters);
    }
}

在这里我得到了相同的错误:

namespace WebMatrix.WebData
{
    internal class DatabaseWrapper : IDatabase, IDisposable
    {
        private readonly Database _database;
        public DatabaseWrapper(Database database)
        {
            this._database = database;
        }
        public void Dispose()
        {
            this._database.Dispose();
        }
        public int Execute(string commandText, params object[] parameters)
        {
            return this._database.Execute(commandText, parameters);
        }
        [return: Dynamic(new bool[] { false, true })]
        public IEnumerable<object> Query(string commandText, params object[] parameters)
        {
            return this._database.Query(commandText, parameters);
        }
        [return: Dynamic]
        public object QuerySingle(string commandText, params object[] parameters)
        {
            return this._database.QuerySingle(commandText, parameters);
        }
        [return: Dynamic]
        public object QueryValue(string commandText, params object[] parameters)
        {
            return this._database.QueryValue(commandText, parameters);
        }
    }
}

不要使用'System.Runtime.CompilerServices.DynamicAttribute

映射到:

IEnumerable<dynamic> Query(string commandText, params object[] parameters);
dynamic QuerySingle(string commandText, params object[] args);
dynamic QueryValue(string commandText, params object[] parameters);

我能想到使用替代语法的唯一原因是在不知道dynamic关键字的底层编译器上编译它。然而,[DynamicAttribute]只存在于。net 4.0之后,它包含了一个支持dynamic的编译器。思想:

  • 是否可能使用asp.net编译器,它可能不一定被配置为使用vLatest
  • 是否这可能与早期针对CTP构建的开发有关,当dynamic不完整时

如果你看一下当前的源代码,它使用dynamic,支持任何[Dynamic]的使用纯粹是过渡性的假设。