Метод расширения в C# 2.0

какое пространство имен мне нужно, чтобы мое расширение работало

вот мой метод расширения


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

когда я пытаюсь использовать его в такой

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

он не работает. Это .net 2.0

4 ответов


ты не можешь. C# 2.0 вообще не имеет методов расширения. Вы можете использовать методы расширения в C# 3.0 в Visual Studio 2008 с таргетинг .NET 2.0, как описано в my статья"версии C#/.NET" но вы не можете убедить компилятор C# 2.0 действовать так, как будто он понимает, что такое методы расширения.


теги говорят .NET 2.0; Если вы используете C# 3.0 (т. е. VS 2008) и нацеливаете .NET 2.0, вы можете сделать это, объявив ExtensionAttribute-или (проще) просто ссылку LINQBridge.

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

С этим на месте, методы расширения будут работать в .NET 2.0 С C# 3.0.


методы расширения не будет работать в C# 2, потому что они полагаются на компилятор C# 3. Компилятор C# 3 знает, как сделать перевод из этого:

foo.Bar()

для этого:

ExtensionClass.Bar(foo)

Как сказал JS, C# 2.0 не имеет методов расширения.

также Этот метод расширения будет определен как:

public static DataTable ToDataTable(this IDataReader reader)

попробуйте назвать это как:

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