问题描述
我正在用 C# 编写一个 sci-comp 应用程序(不要与 comp-sci 混淆),它应该接受用户输入的实数和复数。理想情况下,可能输入之间的这种差异将反映在下游的许多点上——如果输入是简单的实数,我希望从那里创建的所有对象都作为简单的双精度数;如果输入具有复数,则所有相关对象都必须是复数。 (它们的语法、方法和重载完全相同)
现在,我想这样做的原因是,虽然从一开始就假设所有输入都复杂会更安全,但如果我可以在适当的时候使用双精度类型,我可以节省内存(以及潜在的处理时间) .我看到这只会消耗所需内存的一半,并且在这些情况下算术运算更简单。
简单地说,在运行时,我的代码将根据用户输入来决定什么更合适,鉴于语法是完全可重用的,这是可以接受的。我将尝试使用简单的 int 和 double 数据类型概述一个示例,以使其更清楚:
Console.WriteLine("Enter input: ");
var input = Console.ReadLine();
bool hasValuesAfterComma = isInputFractional(input);
double myVar = Double.Parse(input); // This is executed if hasValuesAfterComma == true,int myVar = Int.Parse(input); // Otherwise this is considered. All statements after this line work both with double or int types.
如何在运行时设置合适的数据类型?
附言我正在使用 MathNet.Numerics 包及其数据类型进行线性代数处理。
解决方法
尝试动态变量:
dynamic myVar = hasValuesAfterComma? Double.Parse(input): Int.Parse(input);