选择条件下的数学运算

FSo*_*ou1 0 .net c# math

我可能有一个奇怪的问题,但我会尝试描述它.我有一个带有两个数学运算"%"和"/"的表达式:

int a = x / y;
int a = x % y;
Run Code Online (Sandbox Code Playgroud)

我有一个函数的参数,我检查,我必须为此表达式实现什么Math运算符(%或/).因此,有一种方法可以选择运算符表达而无需重复代码.

int a = parameter ? x / y: x % y;
Run Code Online (Sandbox Code Playgroud)

要么

if (parameter) a = x/y; else a = x%y;
Run Code Online (Sandbox Code Playgroud)

这对我来说不对.

有一种方法可以使用这样的东西:

int a = x (parameter ? / : %) y;
Run Code Online (Sandbox Code Playgroud)

代码愿景问题:

items.Where((item, index) => 
                    settings.cbl_Direction == Direction.Horizontal ?
                        index / (int)settings.cbl_RepeatColumns == i 
                    :
                        index % (int)settings.cbl_RepeatColumns == i)
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 5

你可以这样做:

Func<int, int, int> div = (m, n) => m / n;
Func<int, int, int> mod = (m, n) => m % n;

int a = (parameter ? div : mod)(x, y);
Run Code Online (Sandbox Code Playgroud)

在我看来,这会略微增加代码的复杂性,因此坚持使用已有的东西可能会更好.

  • +1可爱,但与使用内联语句的`?:`仍然没什么不同. (3认同)