我正在创建一个文件对话框,需要能够将文件类型掩码作为构造函数的一部分传递。如果可能的话,我想将这些面具存储为枚举。以下是一个例子:
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
,但这没有用。我正在尝试甚至可能吗?或者我需要采取不同的方法来存储面具。
答案 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>
。