2010-08-13 168 views
1

我想写一个扩展方法来扩展我的一些类的成员。具体来说,我想扩展一个枚举。但是,这是行不通的:扩展类成员的扩展方法?

namespace mynamespace 
{ 
    public class myclass 
    { 
     public enum ErrorCodes 
     { 
      Error1, Error2, Error3 
     } 

     public static double GetDouble(this ErrorCodes ErrorCode) 
     { 
      return (double)((int)ErrorCode); 
     } 

     public void myfunc() 
     { 
      ErrorCodes mycode; 
      MessageBox.Show(mycode.GetDouble().ToString()); 
     } 
    } 
} 

具体来说,它不承认GetDouble()作为扩展。这不仅仅是为了枚举,我试图为双打创建一个扩展方法,也有同样的问题。

+2

您是如何得到这个编译的? – 2010-08-13 20:55:16

回答

5

您只能在顶级静态非泛型类中编写扩展方法,但它们可以扩展嵌套类。下面是一个完整的示例,基于您的代码:

using System; 

public static class Extensions 
{ 
    public static double GetDouble(this Outer.ErrorCode code) 
    { 
     return (double)(int)code; 
    } 
} 

public class Outer 
{ 
    public enum ErrorCode 
    { 
     Error1, Error2, Error3 
    } 
} 

public class Test 
{ 
    public static void Main() 
    { 
     Outer.ErrorCode code = Outer.ErrorCode.Error1; 
     Console.WriteLine(code.GetDouble()); 
    } 
} 
+0

“请注意,它是在非嵌套的非泛型静态类中定义的” – 2010-08-13 20:54:30

+0

@Steven:你在引用什么? – 2010-08-13 20:55:41

+0

return(double)(int)code;可以返回(int)代码,这个转换是隐含的。 – 2010-08-13 20:56:42

2

扩展方法必须在静态类中定义。

查看manual

编辑

正如乔恩指出,静态类必须是顶级的,没有嵌套。