c# - 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.
如何在运行时设置适当的数据类型?
PS 我正在使用 MathNet.Numerics 包及其数据类型来进行线性代数处理。
解决方案
尝试动态变量:
dynamic myVar = hasValuesAfterComma? Double.Parse(input): Int.Parse(input);
推荐阅读
- android-studio - SearchView 使用列表视图检索错误数据
- python - 如何使用 python 按字母顺序对 XML 进行排序?
- javascript - 如何根据用户角色禁用或隐藏链接?
- azure - Azure 地图室内模块:如何使用 azure 地图在室内导航中的两点之间绘制路径?
- python - 使用python查看该频道的过滤实时更新
- android - AGP 4.0.1 上的数据绑定不是增量的
- python - 使用多个 for 循环增加迭代器时遇到问题
- oracle - Oracle 客户端客户端 12c 32 和 64 位无法在 Windows Server 2016 上安装
- c - 为什么我的函数总是出错?
- python - 在 docker-compose.yml 中运行带有多个 .py 脚本的 Python 包