无法将运算符'> ='应用于类型X和'float'的运算符

问题描述 投票:-1回答:1

我是stackoverflow的新手,可以在这里学习。

如果它们的数据类型不同,如何将运算符'> ='应用于C#中的If语句?

MyClass usingMyClass = ...; // (instance variable)

if (usingMyClass.MyClass >= price) // price is a float

任何解决方案?

c# if-statement boolean-operations
1个回答
4
投票

针对您的特定问题的正确解决方案-如何将银行帐户余额与价格进行比较? -请勿将银行帐户与价格进行比较。正确的解决方案是在帐户对象上创建属性Balance,并将that与价格进行比较。


旁听:“银行帐户”是一种常见的初学者练习,但我希望不是,因为它对银行帐户软件的实际工作方式提供了完全错误的想法。在现实世界的银行帐户软件中,确定是否有足够的余额来支持特定购买的逻辑发生在多个阶段。提议的工作流程(确定帐户是否有足够的资金,如果可以的话,执行交易)存在缺陷,因为可能发生的是[[two交易在进行中,有足够的现金来单独支付这两项费用,但不能同时使用这两种方法,两种检查都会成功,两种交易都会发生,并且帐户最终透支。设计一个高性能的现实系统并避免该问题是困难的,而不是初学者。

此外,正如我在评论中提到的那样,真实的银行帐户软件永远都不会有“可变余额”。相反,它是自帐户开始以来所有交易的仅写终了分类账,可以从中计算余额。您永远不需要银行帐户中的任何[[mutable,因为这样很容易造成欺诈。

此外,如注释中所述,切勿使用浮点或双精度表示货币。使用decimal。它是为该任务而设计的。使用浮点和双精度表示

物理量

,例如长度,质量或速度。

要回答您的实际问题:要创建一个实现其自己的用户定义比较运算符的类,可以使用
运算符重载
。但是,您应该注意

很容易弄错,特别是对于比较运算符

。对于实现比较逻辑的初学者和专家,我的建议是实现one method进行all比较,然后从every重载运算符call进行该方法。我在这里举例说明如何正确执行此操作:https://ericlippert.com/2013/10/07/math-from-scratch-part-six-comparisons/注意,有一项工作要做[[lot]]。您需要重载<<=>>===!=EqualsGetHashCode才能正确执行此操作。
© www.soinside.com 2019 - 2024. All rights reserved.