在C#中是否可以创建一个泛型函数,其中第一个参数是枚举(其中一个是因此我必须是通用的),第二个参数被强制为枚举中选择的枚举值参数?我理解必须使用泛型,但我想不出如何编写这样的表达式,或者甚至可能。
编辑:添加了代码示例 我知道这个代码示例不起作用,但它说明了我正在思考的方向。
public List<int> Call<EnumValue>(Type enumType, EnumValue enumValue) where EnumValue : Enum.GetValues(typeof(enumType))
{
// Something
}
答案 0 :(得分:4)
我认为不可能有像这样的编译时约束。你能做的最好的是运行时检查:
public List<int> Call<TEnum>(Type enumType, TEnum enumValue)
{
if(!enumType.IsAssignableFrom(typeof(TEnum)))
throw new ArgumentException();
// Something
}
更新:虽然我不确定您为什么需要传递Type
,但如果它必须与其他参数相同类型。你不能摆脱第一个参数吗?
public List<int> Call<TEnum>(TEnum enumValue)
{
Type enumType = typeof(TEnum);
// Something
}
答案 1 :(得分:2)
我想要做类似的事情的唯一方法是在函数内部添加一个条件,如果参数错误(有明确的解释),则返回一些东西或抛出异常。