如何在编译到不同的目标时暂时将一种原始类型替换为另一种原始类型?

Kei*_*ith 5 c# replace compilation primitive-types c-preprocessor

如何使用这两种特殊的基本类型选择轻松/快速地替换浮点数(例如)以编译为两个不同的目标?

讨论:我有大量的c#代码正在开发中,我需要编译,或者根据目标程序集的用例使用float,double或小数.

使用像"类MYNumber:Double"这样的东西,只需要更改一行代码就行了,因为Double是密封的,显然C#中没有#define.使用#if #else语句来编写代码也不是一个选项,使用这些特定的基元类型支持数学运算符/相关代码太多了.

我对如何做这个看似简单的任务感到茫然,谢谢!

编辑:只是快速评论与凯莱回复中提到的拳击:不幸的是我需要避免拳击,主要是因为当需要最大速度时选择浮动,并且当最大准确度是优先级时的小数(并且取20x +性能命中是上可接受的).拳击可能会排除小数作为一个有效的选择,并在某种程度上打败目的.

编辑2:作为参考,那些建议将泛型作为这个问题的可能答案的人注意到有很多问题可以计算出泛型(至少对我们的需求而言).有关概述和进一步参考,请参阅使用泛型进行计算

Lor*_*nVS 8

执行此操作的最佳方法是使用#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;}
}
Run Code Online (Sandbox Code Playgroud)

编辑:

我仍然非常喜欢这个解决方案,它允许你做一些其他非常酷的事情,例如:

Numeric.Parse();
Numeric.TryParse();
Run Code Online (Sandbox Code Playgroud)

哪个适用于所有三种类型