2016-01-22 37 views
1

鉴于此问题的shorthand If Statements: C#C#简写这是什么问题?

这是什么问题?

int userID; 
    Int32.TryParse(request.userID, out userID); 

    userID > 0 ? user = DuoUser.LoadUser(userID): ; 

它给人的错误:

only assignment call increment decrement and new object expressions can be used as a statement 

至于我可以看到它应该工作,但什么是错的?

编辑:

我也曾尝试:

int userID = 0; 

    userID > 0 ? user = DuoUser.LoadUser(userID): null; 

但它仍然给出了同样的错误。

+0

您对价值分配到的东西,如:'用户=用户id> 0? DuoUser.LoadUser(userID):;'语句就像'变量 - 如果 - 然后 - 其他' –

回答

6

更改最后一行:

user = userID > 0 ? DuoUser.LoadUser(userID) : null ; 

错误消息是正确的。您必须将三元运算符的结果分配给某些内容。

UPDATE

你编辑的问题仍然有同样的问题。您没有将三元表达式的结果分配给任何东西,您正试图在语句中分配。

三元运算符只是说

something = condition ? result if condition is true : otherwise this result if false. 

你可以交替做:

if (userID > 0) 
    user = DuoUser.LoadUser(userID); 

其中一些可能会发现更容易在任何情况下阅读。

+0

你不是指'user = userID> 0吗? DuoUser.LoadUser(userID):null;'? –

+0

是的 - 我发现并已经更正了它。我的编辑和你的评论一定是在同一时间到达的。 –

+0

顺便说一句:在干净的代码,代码可读性和代码重构方面,对三元运算符有一个共同的看法吗? –

1

你可以试试这个:

userID= userID > 0 ? DuoUser.LoadUser(userID): null; 
+0

结果应该分配给'user'而不是'userID' –

1

三元运算符测试一个条件。它比较两个值。它产生取决于比较结果的第三个值。这可以通过if语句或其他构造来完成。

所以,你的代码变得

int userID; 
    Int32.TryParse(request.userID, out userID); 
    userID = userID > 0 ? user = DuoUser.LoadUser(userID): 0; 
+0

结果应该分配给'user'而不是'userID' –