Reputation: 18772
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
Upvotes: 11
Views: 9429
Reputation: 1062492
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.
Upvotes: 25
Reputation: 36027
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"])
)
Upvotes: 2
Reputation: 351446
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)
Upvotes: 2
Reputation: 1499760
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.
Upvotes: 31