C#:有没有办法将一个枚举作为参数传递?
问题描述:
我查过了(可能还不够),但找不到答案。C#:有没有办法将一个枚举作为参数传递?
我想做一个通用函数,我可以通过任何枚举来使用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()));
}
}
所以,我可以使用一个函数来制作/读取任何标志。
问题是,我不知道如何通过枚举,因为我需要在函数中。
答
你想改变这一行:
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);
}
这样你可以检查什么枚举它在你做某事之前。
我希望这可以帮助你。
出了什么问题? – MasterXD
删除typeof(e)并离开Enum.Parse(e ...因为e已经是一个类型了吗? – Andez
'typeof(e)'当'e'是'Type'就是给你'Type'的类型对象,而不是枚举类型,你只需要将'e'传递给'Enum.Parse'。 – juharr