我这里有一段代码。在case ServiceType.Register:中,我有两个类似的语句,一个使用常规的if语句,另一个使用三元操作符?/:。对于if语句VS报告没有错误。然而,在这一行:
IsXML == true ? PopulateRegister(ParseType.Xml) : PopulateRegister(ParseType.Str);
VS错误地说:
只有赋值、调用、增量、递减、等待和新的对象表达式才能用作语句。
有人知道为什么常规的if语句没有错误,但是如果使用"?/:“(一个队列)抛出一个错误?附件中还附上了Pic。
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;
}

发布于 2015-05-01 21:45:09
?:运算符用于条件赋值,而不是操作。
声明:
IsXML == true ? PopulateRegister(ParseType.Xml) : PopulateRegister(ParseType.Str);如果方法PopulateRegister返回一个值,并且将该值赋值给某物,则为有效。例如,这将是有效的:
string result = (someCondition) ? "condition is true" : "condition is false";您可能希望以这种方式使用条件(请注意,我们使用ParseType枚举值作为条件的返回类型,它充当方法的参数):
PopulateRegister((IsXML) ? ParseType.Xml : ParseType.Str);请注意,上面的内容是可能的,但是很难理解/调试/维护代码,通常不会将其视为最佳实践。
发布于 2015-05-01 21:43:53
条件运算符是将值赋给变量的快捷方式。但是您的方法PopulateRegister不返回值(void)。所以使用if-else代替。
发布于 2015-05-01 21:48:27
错误的原因是if..then..else是一条语句,意味着它不应该返回一个值,把它看作是一个空函数的类型(不是,但我希望您知道),而? :运算符是一个表达式,这意味着它返回一个值,而且由于您使用的函数是void,所以没有什么可返回的。希望这能有所帮助
https://stackoverflow.com/questions/29995569
复制相似问题