C#:有没有办法将枚举作为参数传递?

时间:2016-08-02 14:10:30

标签: c# enums parameter-passing checkedlistbox

我搜索过(可能还不够),但无法找到答案。

我想创建一个泛型函数,我可以通过任何枚举来使用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()));
    }
}

因此,我可以使用单个函数创建/读取任何标志。

问题是我无法弄清楚如何在函数中传递枚举。

3 个答案:

答案 0 :(得分:0)

可能不完整,但听起来你需要一个通用的Enum迭代器。我从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");
   }

   //...
}

答案 1 :(得分:0)

我知道这不是一个很好的代码,但这对我有用:

如果方法需要一个对象而不是一个类型(也许你可以用一个类型),你可以这样做:

if (e.GetType() == typeof(ImageType))
    {
        ValueArray = GetEnumArray(ImageType.Bmg);
    }

通过这种方式,您可以在执行操作之前查看Enum的内容。

我希望这可以帮到你。

答案 2 :(得分:-1)

您想要更改此行:

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;