2013-05-14 8 views
5

Copio e incollo fonte di WebMatrix.WebData.IDatabase ma Mark VStudio dinamica parole e ha dettoNon utilizzare 'System.Runtime.CompilerServices.DynamicAttribute'. Usa la parola chiave 'dinamica' invece

Non utilizzare 'System.Runtime.CompilerServices.DynamicAttribute'. Utilizzare invece la parola chiave 'dinamica' .

Perché ottengo questo errore quando il framework .net originale lo utilizzava?

Il codice sorgente è qui:

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); 
    } 
} 

ed ottengo lo stesso errore qui:

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

dove stai copiando questa fonte * da *, esattamente? Mi sembra che tu stia usando una vecchia fonte: –

+1

@Marc Gravell Ho usato .net reflector per decompilarlo ... –

+1

ah, giusto; allora quello ** non è il codice sorgente **. Reflector spesso rende le cose "sbagliate", perché ** non mostra il tuo codice sorgente **. Oppure, in alternativa, riflettore ottiene le cose "giuste" mostrandoti ciò che è veramente lì. Ma: può essere diverso da ciò che scriveresti come codice. –

risposta

5

che mappa:

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

L'unico motivo che mi viene in mente usare la sintassi alternativa è per compilarlo su un compilatore di livello inferiore che non conosce lo dynamic parola chiave. Tuttavia, [DynamicAttribute] esiste solo da .NET 4.0, che include un compilatore con supporto dynamic. Pensieri:

  • È forse usando il compilatore asp.net, che potrebbero non necessariamente essere configurato per utilizzare vLatest
  • fa questo forse si riferiscono allo sviluppo precoce contro CTP build, quando dynamic era incompleta

Se si guarda allo current source, utilizza dynamic, a supporto dell'ipotesi che qualsiasi utilizzo di [Dynamic] fosse puramente transitorio.

+0

Grazie mille .. http://aspnetwebstack.codeplex.com/SourceControl/latest#src/WebMatrix.WebData/IDatabase.cs è una buona fonte per usare ..: D –