Logic 简化典型的(?)条件构造

Logic 简化典型的(?)条件构造,logic,boolean-logic,Logic,Boolean Logic,我经常看到(有时自己写)这样的结构: if(A || B) { var sharedValue = ...; if(A) { // do stuff with sharedValue } else { // do other stuff with sharedValue } } 实例: 开关(e键) { /* *不要介意开关,因为它可以简单地转换为: *如果(e.Key==Key.Left | | e.Key=

我经常看到(有时自己写)这样的结构:

if(A || B)
{
    var sharedValue = ...;
    if(A)
    {
      // do stuff with sharedValue
    }
    else
    {
      // do other stuff with sharedValue 
    }
}
实例:

开关(e键)
{
/* 
*不要介意开关,因为它可以简单地转换为:
*如果(e.Key==Key.Left | | e.Key==Key.Right){…}
*/
大小写键。左:
案例关键。右:
var container=containerFromData(数据);
如果(e.Key==Key.Left)
{
this.TryNavigateBackward(容器);
}
其他的
{
此.TryNavigateForward(容器);
}
}
我真的觉得我遗漏了什么,所以一定有更好(更简单,更不冗长)的方式来描述这一点,但无法想出一个想法。这个问题可能在某种程度上与人们使用的编程语言有关(我目前在C#),但是,为了简化给定的示例,是否存在任何构造


注意:我知道三元条件运算符
a?b:c
,但这(至少在c#中)仅在检索值并将其放入变量时有效。上面的例子想要用一个共享的价值实际做不同的(可能是复杂的)事情。

因为我没有看到任何其他建议,所以我会扔掉一些,看看它们是否是你想要的

首先,如果OOP在表中,继承可以表示这种共享行为。您要做的是在类
shared
ASpecific
BSpecific
中封装共享的、特定于A的和特定于B的行为,其中
ASpecific
BSpecific
继承自
shared
。然后,如果
A
B
,则分别启动
ASpecific
BSpecific
的实例,然后将其视为
共享
的实例。如果您有条件
C
D
等,而这些条件不使用共享的东西,那么您可能会有另一个名为
Base
的父类,您会有
CBase
DBase
继承自
Base
共享的
继承自
Base
,并根据条件旋转实例,并将结果视为
Base
的实例

第二,当需要共享内容时,您可以通过将特定于A和特定于B的行为传递给共享方法来使用控制反转。您可以使用面向对象编程来实现这一点,也可以使用纯函数式编程。使用后者(因为前者类似于上述解决方案,可能不太好),您将有一个
shared
函数,它将function
f
作为参数。函数
f
将具有需要传入共享对象的签名。然后,如果
A
,则使用一个函数(指针或匿名内联)调用
shared
,该函数对传递给它的共享对象执行
A
特定的内容;否则,如果
B
,则使用一个函数调用
shared
,该函数对传入的共享对象执行
B
特定的填充


如果你真正想要避免的是嵌套,你也可以把
If(A | | B){…}
的东西拿出来,让它在一个更高的范围内被声明但没有被实例化;然后,稍后,分别检查
A
B
,并知道在这些情况下
共享的
将具有先前所需的设置。

感谢您的精彩解释,对我来说,第一种方法似乎最合适,我将对此进行检查。再次感谢。