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

问题描述 投票:0回答:1

我有一个旧产品需要更新,是用 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 编译器以简化流程?

c# visual-studio-2010 c#-4.0 .net-2.0
1个回答
3
投票

我似乎找不到任何参考说明在 .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
的属性。

© www.soinside.com 2019 - 2024. All rights reserved.