枚举类型作为构造函数中的参数

时间:2014-06-28 17:12:19

标签: c# parameters enums

我正在创建一个文件对话框,需要能够将文件类型掩码作为构造函数的一部分传递。如果可能的话,我想将这些面具存储为枚举。以下是一个例子:

public enum ImageFileMask {
    Bmp,
    Dds,
    Dib,
    Hdr,
    Jpg,
    Pfm,
    Png,
    Ppm,
    Tga
}

然后检查我选择文件的时间,如果它属于文件掩码,请使用以下行:

if (Enum.IsDefined(ImageFileMask.GetType(), extension))

(扩展名是所选文件的文件扩展名)。

这一切都运行良好,直到我决定我的文件对话框需要在不同时间接受不同的文件类型。我希望我可以通过构造函数传递任何枚举类型,以便在文件对话框中存储一个评估。

问题是,我无法找到一种方法来将enum类型作为构造函数中的参数接受。

new FileDialogMenu(ImageFileMask);

我总是收到以下错误:

ImageFileMask is a 'type' but is used like a 'variable'

我尝试更改构造函数以获取Type,但这没有用。我正在尝试甚至可能吗?或者我需要采取不同的方法来存储面具。

3 个答案:

答案 0 :(得分:3)

如果我理解你的问题,你想将枚举的类型传递给你的类的构造函数,如下所示:

class FileDialogMenu
{
    readonly Type enumType;

    public FileDialogMenu(Type enumType)
    {
        this.enumType = enumType;
    }
}

如果是这样,你可以这样做:

new FileDialogMenu(typeof(ImageFileMask));

你可以做(​​在你的FileDialogMenu课程内):

if (Enum.IsDefined(enumType, extension))

至少那是我所理解的。

答案 1 :(得分:0)

要扩展Daniel的评论,您需要声明类似

的内容
FileDialogMenu<E> where E : BaseEnum

其中BaseEnum是所有相应的ImageFileMask和相关枚举的父类。

This link可能对您有帮助。

答案 2 :(得分:0)

您可以更改枚举以包含所有可能的类型,并使其成为[Flags]枚举:

[Flags]
public enum ImageFileMask {
    ....

然后你的构造函数可以有一个ImageFileMask allowedImages参数:

var x = new FileDialogMenu(ImageFileMask.Bmp | ImageFileMask.Jpg);

获得文件后,您可以执行按位比较:

ImageFileMask extension = ...
if ((allowedImages & extension) == extension)
{
    // the extension is allowed
}

当然,如果枚举量太大,您也可以考虑简单地提供List<string>