我复制并粘贴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);
}
}
}
答案 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
的编译器。思考:
dynamic
不完整时的CTP构建的早期开发有关如果您查看current source,则会使用dynamic
,支持任何[Dynamic]
使用纯属过渡的假设。