Ответ 1
К сожалению, невозможно указать ограничения общих типов, которые допускают только определенные типы значений. Более того, это не имело бы большого смысла, даже если бы это было разрешено.
Вы можете указать класс в качестве общего ограничения, но это потому, что вы можете наследовать от классов, таким образом, ограничение устанавливает минимальный порог того, какие типы вы можете использовать.
Если бы это было разрешено для типов значений, где вы не можете наследовать от этих типов, вы бы эффективно ограничивали себя только этим типом.
Таким образом, вы не можете сделать это, но у вас есть несколько альтернатив:
- Вы можете объявить это без ограничений и решить проблему во время выполнения. Я бы не рекомендовал этот путь
-
Вы можете объявить перегрузки, которые принимают определенные типы, которые вас интересуют.
Поскольку у вас есть только два таких типа, я бы порекомендовал это сделать.
Вот перегрузки, которые вы бы объявили:
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
}