Metodo di estensione in C # 2.0

Di che spazio dei nomi ho bisogno per far funzionare la mia estensione

Ecco il mio metodo di estensione


 usando il sistema;
 using System.Collections.Generic;
 usando System.Web;
 usando System.Data;

 namespace MyUtilities
 {
     class statica pubblica DataReaderExtensions
     {
         statico pubblico DataTable ToDataTable (lettore IDataReader)
         {
             Tabella DataTable = new DataTable ();
             table.Load (lettore);
             tavolo di ritorno;
         }
     }
 }

Quando cerco di usarlo in questo modo

 Session ["Master"] = cust.GetCustomerOrderSummary ((string) Session ["CustomerNumber"]). ToDataTable ();

non funziona Questo è .net 2.0

Non puoi C # 2.0 non ha affatto metodi di estensione. È ansible utilizzare i metodi di estensione da C # 3.0 in Visual Studio 2008 con .NET 2.0 come descritto nel mio articolo “C # /. NET”, ma non è ansible convincere un compilatore C # 2.0 ad agire come se comprendesse quali sono i metodi di estensione.

I tag dicono .NET 2.0; Se si utilizza C # 3.0 (ovvero VS 2008) e si utilizza .NET 2.0, è ansible farlo dichiarando ExtensionAttribute o (più semplicemente) facendo semplicemente riferimento a LINQBridge .

namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class | AttributeTargets.Method)] public sealed class ExtensionAttribute : Attribute { } } 

Con questo sistema, i metodi di estensione funzioneranno in .NET 2.0 con C # 3.0.

I metodi di estensione non funzionano in C # 2 perché si basano sul compilatore C # 3. Il compilatore C # 3 sa come eseguire la traduzione da questo:

 foo.Bar() 

a questo:

 ExtensionClass.Bar(foo) 

Come ha detto JS, C # 2.0 non ha metodi di estensione.

Anche questo metodo di estensione sarebbe definito come:

 public static DataTable ToDataTable(this IDataReader reader) 

Prova a chiamarlo come:

 DataReaderExtensions.ToDataTable( cust.GetCustomerOrderSummary((string)Session["CustomerNumber"]) )