[英]How to deduce the second generic parameter through the first generic parameter?
[英]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.