gpt4 book ai didi

c# - 3路计算

转载 作者:太空狗 更新时间:2023-10-29 20:22:41 27 4
gpt4 key购买 nike

我有一个包含三个字段 A、B 和 C 的数据对象。问题是用户可以设置其中任何一个,因为:

A * B = C

因此,如果用户通过设置 A 和 B 开始,则将计算 C。但是如果用户设置 C,A 将被重新计算,因此会根据用户设置的最后一个字段发生隐式锚定。

我想避免使用大量标志成员变量的解决方案。关于如何编写此类代码而无需下面的大量内容的任何最佳实践

public class Object
{
private double _A;
private double _B;
private double _C;

private bool _enteredA;
private bool _enteredB;
private bool _enteredC;

public double A
{
get
{
if (_enteredC)
{
return _C / _B;
}
else
{
return _A;
}
}
}

设置A、B、C的逻辑应该一直在“get”还是“set”上。

有没有更简洁的方法来做到这一点?

最佳答案

所以你的规则是:

A = C / B
B = C / A
C = A * B

您需要做的是记住用户输入的最后两个 字段,并据此计算第三个字段。因此,如果他们输入 A,然后输入 B,则您计算 C。如果他们随后更改 C,则重新计算 A,依此类推。

如果您想在不使用 bool 标志的情况下对其进行编码,可以采用多种不同的方法。一个队列,或者只是一个简单的数组/映射就可以了:

editOrder = {A : 0, B : 0, C : 0 }  // (or just use 0, 1, 2)
editCount = 0;

every time any field is edited :
editCount = editCount + 1
editOrder[field] = editCount
if two fields have an editOrder > 0
recalculate the field with the lowest editOrder

示例用法:

Field changed    editOrder        recalculate field
A 1,0,0 -
A 2,0,0 -
B 2,3,0 C
C 2,3,4 A
C 2,3,5 A
B 2,6,5 A
A 7,6,5 C

关于c# - 3路计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/445658/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com