2013-05-14 56 views
5

我複製和粘貼WebMatrix.WebData.IDatabase來源,但VStudio標記動態話,說請勿使用'System.Runtime.CompilerServices.DynamicAttribute'。使用「動態」的關鍵字,而不是

不要使用「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

你要從哪裏複製這個源*,完全是?它在我看來就像你使用的是舊的來源 – 2013-05-14 09:54:47

+1

@Marc Gravell我用.net反射器來反編譯它... – 2013-05-14 09:56:26

+1

啊,對;那麼**不是源代碼**。反射器經常會導致事情「錯誤」,因爲它不會顯示源代碼**。或者,通過向您展示真正存在的內容,反射器可以讓事情「正確」。但是:這可能與您編寫代碼的內容不同。 – 2013-05-14 10:00:41

回答

5

映射到:

IEnumerable<dynamic> Query(string commandText, params object[] parameters); 
dynamic QuerySingle(string commandText, params object[] args); 
dynamic QueryValue(string commandText, params object[] parameters); 

我能想到的唯一原因使用替代語法是在不知道0123的下級編譯器上編譯它關鍵字。但是,自從.NET 4.0開始,[DynamicAttribute]才存在,其中包括支持dynamic的編譯器。思考:

  • 是它可能使用asp.net編譯器,它不一定配置爲使用vLatest
  • 沒有這也許涉及到早期的發展對CTP版本,當dynamic不全

如果您查看current source,它使用dynamic,支持任何使用純粹是過渡的假設。

+0

非常感謝.. http://aspnetwebstack.codeplex.com/SourceControl/latest#src/WebMatrix.WebData/IDatabase.cs是使用..的良好來源:D – 2013-05-14 09:59:56

相關問題