【发布时间】:2020-10-19 01:51:57
【问题描述】:
我想为 any Enum 编写一个扩展方法,该方法从该枚举中返回一个随机值,目前我得到了这个:
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 告诉我 Error CS0117 'Monster.presets' does not contain a definition for 'randomEnum'
注意:我不得不为那个 ext 方法做很多谷歌搜索,所以如果有一个我错过或只是没有想到的更简单的方法,我非常感谢它
【问题讨论】:
-
你不能有一个静态的扩展方法......他们只是不存在。
-
这能回答你的问题吗? Static extension methods
-
@Sweeper "你不能有静态扩展方法。" - 请解释一下?
-
@TheGeneral 当然方法声明标记为“静态”,以防您误解。 :-) 请参阅 Martheen 评论中链接的答案。我是这个意思。
-
@hiew1 一般的要点是,我创建了一个具有一些具有随机值的枚举属性的对象,并且作为该代的一部分,涉及其他枚举,我也想要随机值,所以我认为它是编写一个接受 any 枚举并从中返回随机值的函数是个好主意。老实说,我对此很陌生,它融化了我的大脑,所以如果我解释得很糟糕,我会道歉
标签: c# enums extension-methods