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

时间:2013-05-14 09:36:36

标签: c# webmatrix

我复制并粘贴WebMatrix.WebData.IDatabase的来源,但VStudio标记动态字词并说

  

不要使用' System.Runtime.CompilerServices.DynamicAttribute'。使用   '动态'而是关键字。

为什么我在原始.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);
        }
    }
}

1 个答案:

答案 0 :(得分:5)

映射到:

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
  • 这可能与dynamic不完整时的CTP构建的早期开发有关

如果您查看current source,则会使用dynamic,支持任何[Dynamic]使用纯属过渡的假设。