扩展方法+控制台应用

时间:2009-10-15 13:40:53

标签: c# extension-methods console-application

好的,我很好,真的很难过。

我以前写过扩展方法,从来没有遇到任何问题。但是,我从来没有在控制台应用程序中使用它们。以下代码将无法编译,我不知道为什么!我创建了一个简单的控制台应用程序来试用它,它只是不起作用:

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string s = "hello";

            Console.WriteLine(s.TestMethod());

            Console.Read();
        }
    }

    public static class ExtensionTest
    {
        public static string TestMethod(this string input)
        {
            return input.ToUpper();
        }
    }
}

有人能看到这里有什么问题吗?

我遇到的第一个错误是第21行的“预期类型”,即:

(this string input)

我知道我可以很容易地改为:

Console.WriteLine(ExtensionTest.TestMethod(s));

但我真的很想知道为什么我不能在控制台应用程序中编写此扩展方法。

感谢您的帮助!

4 个答案:

答案 0 :(得分:4)

刚刚使用该确切文本创建了一个新的控制台应用程序,并按预期编译和工作。当然它的目标是正确的框架?

答案 1 :(得分:2)

您确定使用的是C#3.0吗?代码中没有问题。

如果您使用C#3.0定位.NET 2.0,您仍然可以通过在项目中定义以下类型来使用扩展方法:

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

答案 2 :(得分:0)

看来,您的项目已设置为针对.NET框架的v2.0进行编译。尝试在项目属性中切换到v3.5并引用System.Core程序集..

答案 3 :(得分:0)

确保您的项目面向.NET Framework v3.0或更高版本,并确保System.Core是项目中引用的程序集。