繁体   English   中英

在.Net 2.0项目中创建扩展方法,使用C#4.0进行编译

[英]Creating an extension method in a .Net 2.0 project, compiling with C# 4.0

我有一个我需要更新的旧产品,用C#和.Net 2.0编写。 该项目已更新为与Visual Studio 2010(包括C#4.0编译器)一起使用,但我无法将框架从2.0升级到任何更高版本。

我发现了多篇文章(比如这个问题 )是围绕VS 2008编写的,它随C#3.0编译器一起提供,说明你可以通过为项目定义自己的扩展方法属性类来创建自己的扩展方法。用2.0框架编写。 但是,我似乎无法找到任何引用说明在.Net 2.0项目中使用C#4.0是否仍然需要这样做。

在我的项目中,我是否仍需要定义自定义扩展属性类或是否已对C#4.0编译器进行了改进,以便简化该过程?

我似乎无法找到任何参考说明在.Net 2.0项目中使用C#4.0是否仍然需要这样做。

是的。 编译器需要该属性。 无论您是自己定义还是使用System.Core那个都取决于您。 虽然在您的特定情况下, System.Core不是一个选项,因为它只是.NET 3.5的一部分。

升级到更高版本3.5或更高版本后,您可以安全地从项目中删除此属性,只需使用System.Core属性即可。

如果已升级到Visual Studio 2010; 那么你正在使用C#4.0编译器。 这意味着你需要的只是一个ExtensionAttribute

namespace System.Runtime.CompilerServices
{
    [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)]
    public class ExtensionAttribute : Attribute
    {
    }
}

必须在这个确切的命名空间中。

一旦你有了这个,你可以正常方式声明一个扩展方法(因为你使用的是C#4.0编译器):

public static class Extensions
{
    public static string ToTitleCase(this string str)
    {
        //omitted
    }
}

然后像扩展方法一样使用它:

var str = "hello world";
str.ToTitleCase();

你自己实际上并不需要将ExtensionAttribute放在任何东西上; C#4.0编译器为你做了。 实质上,所有编译器需要的是能够找到名为ExtensionAttribute的属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM