C#:有没有办法将枚举作为参数传递?
C# : Is there a way to pass an enum as an argument?
我搜索过(可能还不够),但找不到答案。
我想制作一个通用函数,我可以在其中传递任何枚举以与 CheckedListBox
(获取或设置值)一起使用。
public enum TypeFlags
{
None = 0x0,
//List of flag
}
private void makeFlagOrBitmask(CheckedListBox list, Type e)
{
int myFlags = 0x0;
//I want to achieve something like that
foreach (Object item in list.CheckedItems)
{
//(TypeFlags)Enum.Parse(typeof(TypeFlags), item);
//So e should be the enum himself, but i can't figure how to do that
myFlags += (int)((e)Enum.Parse(typeof(e), item.tostring()));
}
}
所以,我可以 make/read 任何具有单一功能的标志。
问题是我不知道如何在函数中传递我需要的枚举。
您想更改此行:
myFlags += (int)((e)Enum.Parse(typeof(e), item.tostring()));
进入这个:
myFlags += (int)((e)Enum.Parse(e, item.tostring()));
因为 e
已经是一个类型。至于如何传递参数:
makeFlagOrBitmask(myCheckBoxList, typeof(myEnum));
希望对您有所帮助。
编辑:
为确保只有枚举有效,请将其添加到函数的顶部:
if (!e.IsEnum)
return;
可能不完整,但听起来您需要一个通用的枚举迭代器。我从 Create Generic method constraining T to an Enum
中获取了以下代码
public T GetEnumFromString<T>(string value) where T : struct, IConvertible
{
if (!typeof(T).IsEnum)
{
throw new ArgumentException("T must be an enumerated type");
}
//...
}
我知道这不是一个很好的代码,但这对我有用:
如果该方法需要对象而不是类型(也许您可以使用类型来实现),您可以这样做:
if (e.GetType() == typeof(ImageType))
{
ValueArray = GetEnumArray(ImageType.Bmg);
}
通过这种方式,您可以在执行某项操作之前检查它是什么 Enum。
希望对您有所帮助
我搜索过(可能还不够),但找不到答案。
我想制作一个通用函数,我可以在其中传递任何枚举以与 CheckedListBox
(获取或设置值)一起使用。
public enum TypeFlags
{
None = 0x0,
//List of flag
}
private void makeFlagOrBitmask(CheckedListBox list, Type e)
{
int myFlags = 0x0;
//I want to achieve something like that
foreach (Object item in list.CheckedItems)
{
//(TypeFlags)Enum.Parse(typeof(TypeFlags), item);
//So e should be the enum himself, but i can't figure how to do that
myFlags += (int)((e)Enum.Parse(typeof(e), item.tostring()));
}
}
所以,我可以 make/read 任何具有单一功能的标志。
问题是我不知道如何在函数中传递我需要的枚举。
您想更改此行:
myFlags += (int)((e)Enum.Parse(typeof(e), item.tostring()));
进入这个:
myFlags += (int)((e)Enum.Parse(e, item.tostring()));
因为 e
已经是一个类型。至于如何传递参数:
makeFlagOrBitmask(myCheckBoxList, typeof(myEnum));
希望对您有所帮助。
编辑:
为确保只有枚举有效,请将其添加到函数的顶部:
if (!e.IsEnum)
return;
可能不完整,但听起来您需要一个通用的枚举迭代器。我从 Create Generic method constraining T to an Enum
中获取了以下代码public T GetEnumFromString<T>(string value) where T : struct, IConvertible
{
if (!typeof(T).IsEnum)
{
throw new ArgumentException("T must be an enumerated type");
}
//...
}
我知道这不是一个很好的代码,但这对我有用:
如果该方法需要对象而不是类型(也许您可以使用类型来实现),您可以这样做:
if (e.GetType() == typeof(ImageType))
{
ValueArray = GetEnumArray(ImageType.Bmg);
}
通过这种方式,您可以在执行某项操作之前检查它是什么 Enum。
希望对您有所帮助