繁体   English   中英

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()));
    }
}

因此,我可以使用一个功能来制作/读取任何标志。

问题是我无法在函数中找到所需的枚举。

可能还不完整,但是听起来您需要一个通用的Enum迭代器。 我从将T约束为Enum的Create Generic方法中获取了以下代码

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);
    }

这样,您可以在执行操作之前检查它的枚举。

希望对您有所帮助。

您要更改此行:

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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM