English 中文(简体)
a. 限制类型与方法
原标题:Pass a constrained type to a method

这里有一些关于SO的类似问题,但似乎没有人回答我的问题。

我想制定一种方法,采用Enum型,并为国际统一分类系统编制一份清单。 具有类似签名的:

public static List<ListItem> ListItemListFromEnum(Type t)
{
    ...        
}

But I would prefer not to accept any type (t must be an Enum type) So I could do something like this:

public static List<ListItem> ListItemListFromEnum(Enum e)
{
    Type t = e.GetType();
}

并且只是通过该方法的正确类型。 这将奏效,但我真的希望是(如我的第一个例子)采用一种类型参数,但迫使它是一种Enum型。

Is this possible? Is there a way to do it with generics? Thanks

最佳回答
问题回答

您可以接受<代码>。 类型,如果该类型不是<代码>enum的类型,则予以放弃。 这可能是最佳办法(除非C#允许普通类型持有人受<条码>Enum的限制,否则永远不会这样做)。

public static List<ListItem> ListItemListFromEnum(Type t)
{
        if (!t.IsEnum)
        {
            throw new ArgumentException("The type passed in must be an enum type.");                
        }

        // ...
}

这是C#本身与许多<代码>做的。 Enum等静态方法(例如Enum.GetEnumNames()。





相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

NSArray s, Primitive types and Boxing Oh My!

I m pretty new to the Objective-C world and I have a long history with .net/C# so naturally I m inclined to use my C# wits. Now here s the question: I feel really inclined to create some type of ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

How to Use Ghostscript DLL to convert PDF to PDF/A

How to user GhostScript DLL to convert PDF to PDF/A. I know I kind of have to call the exported function of gsdll32.dll whose name is gsapi_init_with_args, but how do i pass the right arguments? BTW, ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...

热门标签