【问题标题】:Do not use 'System.Runtime.CompilerServices.DynamicAttribute'. Use the 'dynamic' keyword instead不要使用“System.Runtime.CompilerServices.DynamicAttribute”。改用“动态”关键字
【发布时间】:2013-05-14 09:36:36
【问题描述】:

我复制并粘贴了WebMatrix.WebData.IDatabase的源代码,但VStudio标记了Dynamic字样并说

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

【问题讨论】:

  • 您从哪里复制此源来自,究竟是什么?在我看来,您使用的是旧资源
  • @Marc Gravell 我使用 .net 反射器来反编译它...
  • 啊,对;那么那不是源代码。 Reflector 经常出错,因为它没有向您显示源代码。或者,反射器通过向您展示真正存在的东西来“正确”地处理事情。但是:这可能与您编写的代码不同。
  • @Marc Gravell 我认为你是对的......我尝试使用你的源代码链接......

标签: c# webmatrix


【解决方案1】:

映射到:

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 不完整

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-17
  • 2016-04-05
  • 1970-01-01
  • 1970-01-01
  • 2015-10-24
  • 2016-06-02
  • 2023-03-21
相关资源
最近更新 更多