第二个参数首先依赖的通用函数

时间:2013-07-19 10:37:28

标签: c# generics

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

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

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

2 个答案:

答案 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)

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