Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 扩展方法&x2B;控制台应用程序_C#_Extension Methods_Console Application - Fatal编程技术网

C# 扩展方法&x2B;控制台应用程序

C# 扩展方法&x2B;控制台应用程序,c#,extension-methods,console-application,C#,Extension Methods,Console Application,好吧,我真的被难住了 我以前写过扩展方法,从来没有遇到过任何问题。然而,我从未在控制台应用程序中使用过它们。下面的代码不会编译,我不知道为什么!我创建了一个简单的控制台应用程序来试用,但它无法正常工作: using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 { class Program { static void Main

好吧,我真的被难住了

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

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行的“Type expected”,即:

(this string input)
我知道我可以很容易地换成:

Console.WriteLine(ExtensionTest.TestMethod(s));
但我真的很想知道为什么我不能在控制台应用程序中编写这个扩展方法


谢谢你的帮助

刚刚使用该文本创建了一个新的控制台应用程序,它按照预期进行了编译和工作。确定它针对的是正确的框架吗?

刚刚使用该文本创建了一个新的控制台应用程序,它按照预期进行了编译和工作。确定它针对的是正确的框架吗?

看来,您的项目已设置为针对.NET framework的v2.0进行编译。尝试在project properties and Reference System.Core assembly中切换到v3.5。

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

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

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

namespace System.Runtime.CompilerServices
{
     [AttributeUsage(AttributeTargets.Method)]
     public class ExtensionAttribute : Attribute
     {
         public ExtensionAttribute() { }
     }
}
你确定你在用C#3.0?代码中没有问题

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

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

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

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

这里也一样。。。您确定键入的代码与上面的代码完全相同吗?顺便说一下:编译器会抱怨未定义的“System.Runtime.CompilerServices.ExtensionAttribute”,如果V2是目标。。。如果您定义了自己的扩展方法,就可以使用扩展方法!全校男生!使用vs2005,所以应该是.NET2.0。我只是想使用一个助手类,因为我没有访问vs2008的权限!这里也是一样。。。您确定键入的代码与上面的代码完全相同吗?顺便说一下:编译器会抱怨未定义的“System.Runtime.CompilerServices.ExtensionAttribute”,如果V2是目标。。。如果您定义了自己的扩展方法,就可以使用扩展方法!全校男生!使用vs2005,所以应该是.NET2.0。我只是想使用一个助手类,因为我没有访问vs2008的权限!如果您使用的是C#3.0编译器,则可以在.NET2.0中使用扩展方法。(这是针对微框架的,但它也适用于标准2.0)是的,但他不会认为System.Core具有ExtensionAttribute。当然,手动实现会起作用。感谢您提出这一点。如果您使用的是C#3.0编译器,那么您可以在.NET2.0中使用扩展方法。(这是针对微框架的,但它也适用于标准2.0)是的,但他不会认为System.Core具有ExtensionAttribute。当然,手动实现会起作用。谢谢你提出这一点。你引用了哪些程序集?你引用了哪些程序集?