2011-01-05 3 views
3

В этом коде .NET:?? Оператор с двумя строками?

return Redirect("~/Home" ?? "JaneDoe"); 

Если я читаю документы правильно, "??" оператор, как представляется, работают аналогично IsNull в SQL:

IsNull("~/Home", "JaneDoe") 

"~Home""JaneDoe" и просто строки, правильно? Нет никакого условия в коде return Redirect, где «JaneDoe» будет тем, что передано в «Перенаправление», есть ли? Я не уверен, что делать с этим фрагментом, я могу только предположить, что это место для того, чтобы что-то прийти позже.

Этот код является частью проекта .NET-MVC, входящего в состав файла .cs, который является LoginController.

+7

Вы должны представить это TheDailyWTF.com – jfar

+0

Я думаю, что вы имеете в виду IFNULL, не IsNull. – siride

+1

Я думаю об этом IsNull - http://msdn.microsoft.com/en-en/library/ms184325.aspx – artlung

ответ

7

Да, это просто плохой код. Это будет всегда эквивалентно

return Redirect("~/Home"); 

Я немного удивлен компилятор не достаточно умен, чтобы дать предупреждение об этом, если честно. Было бы неплохо, если бы он мог сказать, что для LHS оператора нулевой коалесценции использовалось постоянное ненулевое выражение.

+0

Спасибо. Мне это показалось странным. Я все еще учусь. – artlung

+2

@artlung: Похоже, кто бы ни написал код, он все еще учится;) –

+0

@Jon Skeet:: - | Да, на данный момент я не вижу большой разницы между примерами проектов .NET-MVC (например: http://www.asp.net/mvc/tutorials/mvc-music-store-part-1), и это , – artlung

2

Да, вы читаете его правильно. Это всегда будет возвращать «~/Home», предположительно, в какой-то момент планировалось изменить его на переменную.

+0

Спасибо, да, кажется, это местозаполнитель. – artlung

1

Правильно, выражение никогда не вернется «JaneDoe».

1

Это всегда будет использовать строку "~/Home". Оператор null-coalescing (??) выбирает левую сторону, если она не равна нулю, или правая сторона, если она равна нулю.

3

Оператор ?? называется оператором с нулевой связью и используется для определения значения по умолчанию для типов значений с нулевым значением, а также ссылочных типов. Он возвращает левый операнд, если он не равен нулю; в противном случае он возвращает правый операнд.

В вашем случае, он никогда не вернется JaneDoe

Смежные вопросы