4

是否可以在 C# 中创建一个通用函数,其中第一个参数是枚举(其中一个参数是枚举,所以我猜它必须是通用的)并且第二个参数被强制为选择为第一个参数的枚举中的值?我知道必须使用泛型,但我想不出如何编写这样的表达式,或者是否有可能。

编辑:添加了代码示例 我知道这个代码示例不起作用,但它说明了我所想的方向。

public List<int> Call<EnumValue>(Type enumType, EnumValue enumValue) where EnumValue : Enum.GetValues(typeof(enumType))
{
  // Something    
}
4

2 回答 2

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
}    
于 2013-07-19T10:54:41.207 回答
2

我想到做类似事情的唯一方法是在函数中添加一个条件,如果参数错误,要么返回一些东西,要么抛出一个异常(有明确的解释)。

于 2013-07-19T10:41:42.597 回答