繁体   English   中英

泛型函数,其中第二个参数取决于第一个

[英]Generic function where second parameter depends on first

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

编辑:添加了代码示例我知道此代码示例无法正常工作,但它说明了我所考虑的方向。

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

我认为不可能有这样的编译时约束。 最好的办法是运行时检查:

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
}    

我想做类似事情的唯一方法是在函数内部添加一个条件,如果参数错误(有明确的解释),则返回某些内容或引发Exception。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM