C#2.0中的扩展方法

时间:2009-04-01 20:09:49

标签: c# .net-2.0 extension-methods

我需要什么命名空间才能使我的扩展工作

这是我的扩展方法


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 个答案:

答案 0 :(得分:31)

你做不到。 C#2.0根本没有扩展方法。您可以使用我在"C#/.NET versions" article中描述的Visual Studio 2008 目标 .NET 2.0中的C#3.0扩展方法,但是您无法说服C#2.0编译器表现得好像它理解了什么扩展名方法是。

答案 1 :(得分:25)

标签说明了.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 { }
}

有了这个,扩展方法将适用于带有C#3.0的.NET 2.0。

答案 2 :(得分:2)

扩展方法在C#2中不起作用,因为它们依赖于C#3编译器。 C#3编译器知道如何从中进行转换:

foo.Bar()

到此:

ExtensionClass.Bar(foo)

答案 3 :(得分:2)

正如JS所说,C#2.0没有扩展方法。

此扩展方法也将定义为:

public static DataTable ToDataTable(this IDataReader reader)

尝试调用它:

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