5

のソースをコピーして貼り付けますが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);
        }
    }
}
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サポート付きのコンパイラが含まれています。考え:

  • vLatest を使用するように必ずしも構成されていない可能性がある asp.net コンパイラを使用している可能性があります。
  • dynamicこれはおそらく、不完全だった CTP ビルドに対する初期の開発に関連していますか?

現在のソースを見ると、それは を使用しており、使用法は純粋に移行的なものdynamicであるという仮説を支持しています。[Dynamic]

于 2013-05-14T09:52:16.100 に答える