C#在运行时选择复杂类型还是标准双精度类型

C#在运行时选择复杂类型还是标准双精度类型,c#,runtime,mathnet-numerics,C#,Runtime,Mathnet Numerics,我正在用C#编写一个sci-comp应用程序(不要与comp-sci混淆),它应该接受用户输入的实数和复数。理想情况下,可能输入之间的差异会反映在下游的许多点上——如果输入是简单实数,我希望从那里开始创建的所有对象都是简单的双倍数;如果输入具有复数,则所有相关对象必须具有复数。(它们的语法、方法和重载相同) 现在,我想这样做的原因是,尽管从早期开始假设所有输入都是复杂的会更安全,但如果我可以在适当的时候使用双类型,我可以节省内存(以及潜在的处理时间)。我知道这只会消耗一半的内存,在这种情况下,算

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

非常感谢。我想可能正是这样it@AlexandrePiccini那么你可以接受答案:)我道歉。谢谢你提醒我,哈哈