Метод расширения в 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"])
)