2009-06-10 98 views
5

CE框架上还有扩展方法吗?我有一个字符串的扩展方法,可以在Windows窗体项目中正常工作,但是它不会在PocketPC应用程序中生成。PocketPC上的C#扩展方法Windows CE

我想这将是一件容易找到的事情,但是我无法找到关于PocketPC上扩展方法的任何信息。

编辑:哎呀,这是我的错误。我在Visual Studio 2008中编写了扩展方法,但是PocketPC项目正在Visual Studio 2005中编译,而我并没有意识到。那是我一生中的一个小时,我永远不会回来。无论如何,谢谢大家的答案。

+0

什么错误(S)是你看到写的吗? – ChrisF 2009-06-10 13:46:16

回答

7

想在这里澄清一点混淆。扩展方法是编译器的一个特性,不一定是框架的特定版本。因此,可以在任何支持扩展方法和平台的编译器版本的平台上使用扩展方法。

C#3.0编译器可以将目标降至2.0框架并支持扩展方法,因此它们应该在紧凑框架上可用。

框架实际为扩展方法提供的唯一东西就是ExtensionAttribute。然而,这并没有任何与之关联的功能,如果它不可用,可以由应用程序定义。这里是一个博客帖子我关于这个问题的

2

根据this blog post,它们在Compact Framework中受支持。但是,我预计他们需要Compact Framework 3.5版。你正在使用哪个版本?

2

你想要的是什么框架版本?如果您是从VS2008靶向CF 2.0,你可能需要声明ExtensionAttribute ...

namespace System.Runtime.CompilerServices 
{ 
    [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class 
     | AttributeTargets.Method)] 
    public sealed class ExtensionAttribute : Attribute {} 
} 
+0

在这里有很好的链接:http://blog.markarteaga.com/UsingExtensionMethodsInNETCF20.aspx – 2009-06-10 13:51:14

0

您可以根据this博客与.NET Compact Framework的2.0和VS2008使用它通过一个小黑客。

3

是的,它们在CF 3.5中受支持。如果您使用的是CF 2.0,则需要定义ExtensionAttribute,然后才能使用。

// this is a definition of a 3.5 class for use in 2.0. If we upgrade to target CF3.5, we will need to remove it... 
    namespace System.Runtime.CompilerServices 
    { 
     public class ExtensionAttribute : Attribute { } 
    } 

namespace TestExtension 
{ 
    public static class Extensions 
    { 
     public static int TestMethod(this string value) 
     { 
      return value.ToString(); 
     } 
    } 
}