2013-07-08 54 views
2

C#我知道你可以做这样的事情:是否有三元运算符在c#中运行函数?

int number = true ? 1 : 0; 

这将返回左侧或右侧,这取决于如果Boolean是真还是假。

但有没有办法做同样的事情,而是运行一个函数,而不是返回一个值?事情是这样的:

这并不工作(我得到多个语法错误)

WPS.EDIT_MODE ? ExecuteEditMode() : ExecutePublicMode(); 

感谢。

+0

这不正常吗?如果两个函数都返回一个我期望的int。 – DoctorMick

+0

看一看http://stackoverflow.com/questions/2765360/ternary-operators-in-c-sharp?rq=1 – jltrem

回答

9

条件运算符必须返回一个值。假设函数不都为您返回一个有意义的值,你应该使用if语句来做到这一点:

if(someCondition) 
    doA(); 
else 
    doB(); 

尽管从技术上说,你可以使用匿名函数来做到这一点,如果你真的

int number = someCondition ? 
    new Func<int>(() => { doA(); return 0; })() : 
    new Func<int>(() => { doB(); return 1; })(); 

但这并不是建议;对于这种情况,使用if/else更容易且更易读。

+0

我更新了我的问题。所以我猜如果函数不返回任何东西,if else是最好的方法。如果他们返回一些东西,但是不把它分配给一个变量呢? – omega

+0

@omega我认为函数从一开始就是无效的;你的编辑并没有改变我答案的有效性。 – Servy

4

如果两个函数都返回int,是的。

三元运算符是关于返回值的。不返回值是没有意义的。

条件运算符(?:)根据 返回布尔表达式的值中的两个值之一。

http://msdn.microsoft.com/en-us/library/ty67wk28(v=vs.80).aspx

+0

他特别说*而不是返回一个值*,这意味着他们不会。 – Servy

+0

我更新了我的问题。如果他们没有返回价值会怎么样。 – omega