不幸的是,不能指定只允许特定值类型的泛型类型约束。更重要的是,即使允许也没有多大意义。
您可以将类指定为通用约束,但这是因为您可以从类继承,因此该约束设置了允许使用的类型的最小阈值。
如果值类型允许这样做,而您不能从这些类型继承,那么您实际上会将自己限制为仅使用该类型。
因此你不能这样做,但你有几个选择:
- 您可以在没有约束的情况下声明它,并在运行时处理问题。 我不推荐这种方式
-
您可以声明采用您感兴趣的特定类型的重载。
由于您只有两种这样的类型,因此我建议您这样做。
这里是你要声明的重载:
public static Chart PopulateInto<T>(List<T> yAxis, List<int> xAxis)
{
// Do stuff here
}
public static Chart PopulateInto<T>(List<T> yAxis, List<decimal> xAxis)
{
// Do stuff here
}
现在,另外,如果您对这些值的处理并不真正依赖于这些类型的数值质量,您只想限制可以处理的类型,那么您可以随时声明您的原始方法,私下,并从您的重载中调用此方法。这仍然会将您的代码限制为只允许int 或decimal,公开,但您的实现仍然是通用的。如果不确切知道“在这里做事”意味着什么,就无法判断这是否是一个可行的选择,但无论如何这里是代码:
public static Chart PopulateInto<T>(List<T> yAxis, List<int> xAxis)
{
return PopulateInto<T, int>(yAxis, xAxis);
}
public static Chart PopulateInto<T>(List<T> yAxis, List<decimal> xAxis)
{
return PopulateInto<T, decimal>(yAxis, xAxis);
}
private static Chart PopulateInto<T, N>(List<T> yAxis, List<N> xAxis) where N : struct
{
// Do stuff here
}