我想为任何枚举编写一个扩展方法,它从该枚举返回一个随机值,目前我得到了这个:
class Monster
{
public enum presets
{
//some values
}
presets p = presets.randomEnum();
}
public static class Extensions
{
public static T randomEnum<T>(this T en) where T : struct , IConvertible , IEnumerable<Enum>
{
if (!typeof(T).IsEnum) { throw new Exception("random enum variable is not an enum"); }
Array values = en.ToArray();
return (T)values.GetValue(Random.Next(values.Length));
}
}
但是当我执行 presets.randomEnum()
时,Visual Studio 19 告诉我 错误 CS0117 'Monster.presets' 不包含 'randomEnum' 的定义
注意:我必须在谷歌上搜索该 ext 方法,所以如果有一个我错过或只是没有想到的更简单的方法,我非常感激
最佳答案
扩展方法必须定义在类的顶部(即在命名空间内部,但不能在另一个类中)。另外,你不能对它施加 IEnumerable 约束,它太多了。这对我有用:
public enum Presets
{
Test,
Test2
}
public static class Extensions
{
public static T RandomEnum<T>(this T en) where T : struct, IConvertible
{
if (!typeof(T).IsEnum) { throw new Exception("random enum variable is not an enum"); }
var random = new Random();
var values = Enum.GetValues(typeof(T));
return (T)values.GetValue(random.Next(values.Length));
}
}
关于c# - 通用枚举类型扩展方法的随机枚举值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64420140/