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