Ниже ссылка на хороший пример о том, как custimize WixUIExtensions.
Лучший способ сделать это - использовать #if, как сказал Эндрю выше. Тем не менее, интересная идея для размышлений была бы примерно такой:
#if USE_FLOAT
using Numeric = System.Single;
#endif
#if USE_DOUBLE
using Numeric = System.Double;
#endif
#if USE_DECIMAL
using Numeric = System.Decimal;
#endif
public class SomeClass
{
public Numeric MyValue{get;set;}
}
РЕДАКТИРОВАТЬ:
Мне все еще нравится это решение, оно позволяет вам делать некоторые другие действительно интересные вещи, такие как:
Numeric.Parse();
Numeric.TryParse();
Что будет работать для всех три типа
В худшем случае, я думаю, вы могли бы использовать бокс и что-то вроде этого:
#if USE_FLOAT
public float OutputValue(object input)
{
return (float)input;
}
#endif
#if USE_DOUBLE
public double OutputValue(object input)
{
return (double)input;
}
#endif
и вызвать OutputValue (1.5);
, чтобы он преобразовал его для вас.
Один из подходов состоит в том, чтобы иметь общий тип вокруг необходимого вам базового типа. Затем вы объявляете класс, который наследует конкретный экземпляр этого универсального шаблона, в отдельном файле .cs, и вы создаете три копии этого класса для каждого необходимого вам базового типа. Затем вы изменяете свой .csproj, чтобы включить соответствующий файл .cs на основе конфигурации сборки.
Обратите внимание, что я на самом деле не пробовал это, так что может быть пара недостатков, которые нужно сгладить.
Вы можете сделать это:
public struct NumberContainer<T>
{
T _number;
// accessor, and possibly: operators, cast methods, etc.
}
А затем:
#if USE_FLOAT
public struct MyNumber : NumberContainer<float>
#else
public struct MyNumber : NumberContainer<double>
#endif
{
}
Это сложно, поскольку базовые типы не требуют чего-то вроде IArithmetic. Это много раз предлагалось на сайте Connect . К сожалению, это хорошо известное ограничение обобщенных типов .
Есть некоторые обходные пути с использованием класса структуры «калькулятор» . Если математика не слишком обременительна, это работает очень, очень хорошо
Однако это неуклюже. Это то место, где универсальные шаблоны не так гибки, как шаблоны C ++.
Еще один подход может заключаться в использовании чего-то вроде Text Template Transformation Toolkit (T4) для создания шаблона, который будет работать с любым типом , и компилировать отдельные для каждого типа.