为什么我不能"看到"这个枚举扩展方法?

Ben*_*Ben 9 c# extension-methods enums

为什么我看不到这个枚举扩展方法?(我想我会疯了).

File1.cs

namespace Ns1
{
    public enum Website : int
    {
        Website1 = 0,
        Website2
    }
}
Run Code Online (Sandbox Code Playgroud)

File2.cs

using Ns1;

namespace Ns2
{
    public class MyType : RequestHandler<Request, Response>
    {                        
        public override Response Handle(Request request,                                       CRequest cRequest)
        {
            //does not compile, cannot "see" ToDictionary
            var websites = Website.ToDictionary<int>(); 

            return null;
        }
    }


    //converts enum to dictionary of values
    public static class EnumExtensions
    {        
        public static IDictionary ToDictionary<TEnumValueType>(this Enum e)
        {                        
            if(typeof(TEnumValueType).FullName != Enum.GetUnderlyingType(e.GetType()).FullName) throw new ArgumentException("Invalid type specified.");

            return Enum.GetValues(e.GetType())
                        .Cast<object>()
                        .ToDictionary(key => Enum.GetName(e.GetType(), key), 
                                      value => (TEnumValueType) value);            
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 15

您试图将扩展方法作为类型上的静态方法而不是作为该类型对象上的实例方法.不支持使用扩展方法.

如果您有实例,则找到扩展方法:

Website website = Website.Website1;
var websites = website.ToDictionary<int>();
Run Code Online (Sandbox Code Playgroud)

  • 它应该不是WebSite网站= WebSite.Website1; 是一个枚举? (3认同)