5

我复制并粘贴了WebMatrix.WebData.IDatabaseVStudio 标记动态词的源并说

不要使用“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);
        }
    }
}
4

1 回答 1

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

如果您查看当前来源,它使用,支持任何使用纯粹是过渡dynamic性的假设。[Dynamic]

于 2013-05-14T09:52:16.100 回答