如何允许声明一个类使用浮点数或双精度数?

Lev*_*i H 6 c# types

对不起,如果标题措辞不好.假设我有一个光线跟踪器,我希望能够使用浮点数或双打.如何能够声明选择浮点数或双精度数的类的新实例?我不想创建两个类,并调用一个double和另一个.

Ree*_*sey 7

在.NET中没有一种干净的方法来处理这个问题.泛型不直接支持算术运算.您可以通过诸如MiscUtils之类的解决方法或通过创建单独的计算器类并将数学委托给它来解决这个问题,但这通常会使代码比具有两个实现更复杂.

你可以dynamic在内部使用,这也可以.但是,这会增加(轻微)开销,这可能会降低其有用性.如果性能是您不希望仅支持双精度数学的主要原因,则使用dynamic可能不是一种选择.

一种选择是使用T4创建一个模板,该模板从单个源文件构建两个版本的代码.这将为您提供完整的原生支持,而无需开销(它基本上只是为您编写两个类).