2009-06-10 95 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(); 
     } 
    } 
}