不要使用“System.Runtime.CompilerServices.DynamicAttribute”,而是使用“dynamic”关键字。

5

我复制并粘贴了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
1
@Marc Gravell 我使用了 .net 反编译器来反编译它... - Mehdi Yeganeh
1
啊,对了;那么那不是源代码。Reflector 经常会出现“错误”,因为它没有显示源代码。或者,反射器通过显示实际存在的内容而得到“正确”的结果。但是:那可能与您编写的代码不同。 - Marc Gravell
1
@Marc Gravell,我认为你是对的。我尝试使用你提供的源代码链接... - Mehdi Yeganeh
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] 的用法都是纯过渡性的。

非常感谢.. http://aspnetwebstack.codeplex.com/SourceControl/latest#src/WebMatrix.WebData/IDatabase.cs 是使用的好资源.. :D - Mehdi Yeganeh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接