在尝试新概念的同时,我发现了Ternary Operator,它的美。在玩了一段时间之后,我决定测试其极限。
Ternary Operator
但是,当我无法编译特定的代码行时,我的乐趣很快就结束了。
int a = 5; int b = 10; a == b ? doThis() : doThat() private void doThis() { MessageBox.Show("Did this"); } private void doThat() { MessageBox.Show("Did that"); }
这行给我两个错误:
Error 1 Only assignment, call, increment, decrement, and new object expressions can be used as a statement Error 2 Type of conditional expression cannot be determined because there is no implicit conversion between 'void' and 'void'
我从未使用过a Ternary Operator来决定要调用哪个方法,也不知道是否可能。我只是喜欢单行If Else Statement方法调用的想法。
If Else Statement
我进行了一些研究,但找不到任何执行此操作的示例,因此,我想我可能希望获得无法提供的功能。
如果可能的话,请启发我做错事情,这是不可能的,还有别的办法吗?
上面的陈述不起作用的原因是其他用户提供的,实际上并没有回答我的真实问题。
经过更多的研究之后,我发现您可以使用该运算符执行上述声明,但是这会导致一些错误的代码。
如果我要将以上陈述改为:
int a = 5; int b = 10; int result = a == b ? doThis() : doThat(); private int doThis() { MessageBox.Show("Did this"); return 0; } private int doThat() { MessageBox.Show("Did that"); return 1; }
这段代码将编译并执行应有的方式。但是,如果这些方法最初并不是要返回任何东西,而是在代码中引用了其他区域,则现在您每次必须调用一个返回对象来调用这些方法。
否则,您现在可以将三元运算符用于单行方法选择器,甚至可以使用结果知道它在下一行中调用了哪种方法。
int result = a == b ? doThis() : doThat(); if (result == 0) MessageBox.Show("You called doThis()!");
现在,这段代码绝对没有意义,可以通过If Else轻松完成,但是我只是想知道是否可以完成,以及您需要做什么才能使其正常工作。
现在,我知道您可以在这些方法中有效地返回任何类型,这可能会变得更加有用。它可能被认为是“错误的编码实践”,但在从来没有被要求的情况下可能会变得非常有用。
您可以根据任何条件访问一个或另一个对象,这在一行代码中可能非常有用。
UserPrivileges result = user.Group == Group.Admin ? GiveAdminPrivileges() : GiveUserPrivileges(); private UserPrivileges GiveAdminPrivileges() { //Enter code here return var; } private UserPrivileges GiveUserPrivileges() { //Enter code here return var; }
当然,这可以通过If语句完成,但是我认为将三元运算符用于其他用途会使编程变得有趣。现在,这可能不如If Else语句有效,在这种情况下,我将永远不会使用它。