首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >if语句与"?/:“运算符之间的区别

if语句与"?/:“运算符之间的区别
EN

Stack Overflow用户
提问于 2015-05-01 21:40:37
回答 5查看 1.2K关注 0票数 2

我这里有一段代码。在case ServiceType.Register:中,我有两个类似的语句,一个使用常规的if语句,另一个使用三元操作符?/:。对于if语句VS报告没有错误。然而,在这一行:

IsXML == true ? PopulateRegister(ParseType.Xml) : PopulateRegister(ParseType.Str);

VS错误地说:

只有赋值、调用、增量、递减、等待和新的对象表达式才能用作语句。

有人知道为什么常规的if语句没有错误,但是如果使用"?/:“(一个队列)抛出一个错误?附件中还附上了Pic。

代码语言:javascript
复制
switch (this.ServiceType)
{
    case SerivceType.Login:
        PopulateLogin();
        break;
    case SerivceType.Register:

        if (IsXML == true)
            PopulateRegister(ParseType.Xml);
        else
            PopulateRegister(ParseType.Str);

        IsXML == true ? PopulateRegister(ParseType.Xml) : PopulateRegister(ParseType.Str);

        break;
    case SerivceType.Verify:
        PopulateVerify();
        break;
}

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-05-01 21:45:09

?:运算符用于条件赋值,而不是操作。

声明:

代码语言:javascript
复制
IsXML == true ? PopulateRegister(ParseType.Xml) : PopulateRegister(ParseType.Str);

如果方法PopulateRegister返回一个值,并且将该值赋值给某物,则为有效。例如,这将是有效的:

代码语言:javascript
复制
string result = (someCondition) ? "condition is true" : "condition is false";

您可能希望以这种方式使用条件(请注意,我们使用ParseType枚举值作为条件的返回类型,它充当方法的参数):

代码语言:javascript
复制
PopulateRegister((IsXML) ? ParseType.Xml : ParseType.Str);

请注意,上面的内容是可能的,但是很难理解/调试/维护代码,通常不会将其视为最佳实践。

票数 6
EN

Stack Overflow用户

发布于 2015-05-01 21:43:53

条件运算符是将值赋给变量的快捷方式。但是您的方法PopulateRegister不返回值(void)。所以使用if-else代替。

票数 3
EN

Stack Overflow用户

发布于 2015-05-01 21:48:27

错误的原因是if..then..else是一条语句,意味着它不应该返回一个值,把它看作是一个空函数的类型(不是,但我希望您知道),而? :运算符是一个表达式,这意味着它返回一个值,而且由于您使用的函数是void,所以没有什么可返回的。希望这能有所帮助

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29995569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档