C# 在运行时决定复杂或标准双精度类型

问题描述

我正在用 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);

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...