enum MyEnum
{
type1,
type2,
type3
}
public void MyMethod<T>()
{
...
}
如何在枚举上制作 forach 以MyMethod<T>
在每个枚举上触发?
我尝试一下
foreach (MyEnum type in Enum.GetValues(typeof(MyEnum)))
{...}
但仍然不知道如何type
在 foreach
中使用 this 和MyMethod<T>
as T
这是你想要做的吗?
class Program
{
static void Main(string[] args)
{
EnumForEach<MyEnum>(MyMethod);
}
public static void EnumForEach<T>(Action<T> action)
{
if(!typeof(T).IsEnum)
throw new ArgumentException("Generic argument type must be an Enum.");
foreach (T value in Enum.GetValues(typeof(T)))
action(value);
}
public static void MyMethod<T>(T enumValue)
{
Console.WriteLine(enumValue);
}
}
写入控制台:
type1
type2
type3
此代码片段演示了如何在消息框中将所有枚举值显示为链式字符串。以同样的方式,您可以使该方法在枚举上执行您想要的操作。
namespace Whatever
{
enum myEnum
{
type1,type2,type3
}
public class myClass<T>
{
public void MyMethod<T>()
{
string s = string.Empty;
foreach (myEnum t in Enum.GetValues(typeof(T)))
{
s += t.ToString();
}
MessageBox.Show(s);
}
}
public void SomeMethod()
{
Test<myEnum> instance = new Test<myEnum>();
instance.MyMethod<myEnum>(); //wil spam the messagebox with all enums inside
}
}
你可以做
private List<T> MyMethod<T>()
{
List<T> lst = new List<T>;
foreach (T type in Enum.GetValues(source.GetType()))
{
lst.Add(type);
}
return lst;
}
并将其称为
List<MyEnum> lst = MyMethod<ResearchEnum>();