11

What namespace do I need to get my extension to work

Here is my Extension Method


using System;
using System.Collections.Generic;
using System.Web;
using System.Data;

namespace MyUtilities
{
    public static class DataReaderExtensions
    {
        public static DataTable ToDataTable(IDataReader reader)
        {
            DataTable table = new DataTable();
            table.Load(reader);
            return table;
        }
    }
}

When I try to use it in like this

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

it doesn't work. This is .net 2.0

Saif Khan
  • 18,402
  • 29
  • 102
  • 147

4 Answers4

31

You can't. C# 2.0 doesn't have extension methods at all. You can use extension methods from C# 3.0 in Visual Studio 2008 targeting .NET 2.0 as described in my "C#/.NET versions" article but you can't persuade a C# 2.0 compiler to act as if it understands what extension methods are.

Jon Skeet
  • 1,421,763
  • 867
  • 9,128
  • 9,194
25

The tags say .NET 2.0; If you are using C# 3.0 (i.e. VS 2008) and targetting .NET 2.0, you can do this by declaring the ExtensionAttribute - or (easier) just reference LINQBridge.

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

With this in place, extension methods will work in .NET 2.0 with C# 3.0.

Per Lundberg
  • 3,837
  • 1
  • 36
  • 46
Marc Gravell
  • 1,026,079
  • 266
  • 2,566
  • 2,900
2

Extension methods will not work in C# 2 because they rely on the C# 3 compiler. The C# 3 compiler knows how to do the translation from this:

foo.Bar()

to this:

ExtensionClass.Bar(foo)
Andrew Hare
  • 344,730
  • 71
  • 640
  • 635
2

As JS said, C# 2.0 doesn't have extension methods.

Also that extension method would be defined as:

public static DataTable ToDataTable(this IDataReader reader)

Try calling it like:

DataReaderExtensions.ToDataTable(
   cust.GetCustomerOrderSummary((string)Session["CustomerNumber"])
   )
eglasius
  • 35,831
  • 5
  • 65
  • 110