2016-05-31 4 views
4

Я не говорю о JavaScript, но в JavaScript, я могу объявить string так:Shorthand отлить строковое значение

var identity = { 
    getUserId: function() { 
     return 'userid'; 
    } 
}; 

var userid = identity.getUserId() || ''; 

Это означает, что: если identity.getUserId() является нулевым или не определено, то значение будет '' автоматически отбрасываться до userid.

Сейчас, в C#:

public static void AddOnlineUser(this IIdentity identity) 
{ 
    string userid = identity.GetUserId(); 

    // long way to check userid is null or not: 
    if (string.IsNullOrEmpty(userid)) 
    { 
     userid = ""; 
    } 

    // invalid C# syntax: 

    // Operator || cannot be applied to operands of type 'string' and 'string' 
    // string userid = idenity.GetUserId() || ""; 

    // Only assignment, call, increment, decrement, and new object expressions can be used as a statement 
    // string.IsNullOrEmpty(userid) ? "" : userid; 
} 

Я не имею в виду: want to create a C# variable same as javascript syntax. Но в этом случае есть способ отличить значение "" до userid, если он пуст или пуст в 1 строке?

ответ

6

Нулевой Коалесцентный Оператор ??

C# имеет свой собственный null-coalescing operator ?? сделать это, чтобы обработать нулевые значения:

// This will use the available GetUserId() value if available, otherwise the empty string 
var userid = identity.GetUserId() ?? ""; 

Имейте в виду, этот оператор будет работать, как ожидается, только если первое значение ваше заявление - null, иначе оно будет использовать это значение. Если есть вероятность, что это не так (и вы можете встретить ненулевое недопустимое значение), тогда вам следует использовать вместо этого тернарный оператор.

оператор троичного ?:

В противном случае, вы можете использовать ternary operator ?: (то есть рядный Условный оператор), чтобы выполнить эту проверку, а также. Это похоже на пример, который вы указали, однако стоит отметить, что вам нужно фактически установить userid на результат:

// This will set it to empty string if null or empty, otherwise it will use the returned id 
userid = String.IsNullOrEmpty(userid) ? "" : userid; 
+0

Большое спасибо! Это поможет :) –

+1

Имейте в виду, что описанная версия с нулевым коалесценцией работает только в том случае, если 'identity.GetUserId()' возвращает значение null, а не пустую строку в случае, когда он не может получить идентификатор пользователя. В этом случае результат совершенно прекрасен, так как это пустая строка в любом случае, но в других сценариях, которые могут привести к очень нежелательному поведению и совсем не соответствовать поведению JavaScript. –

+0

Исправьте оба аккаунта. Я думал, что я разъясняю, что при использовании фразы «для обработки нулевых значений». Тройной подход, вероятно, будет самым близким эквивалентом того, что ищет OP. –

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