Возможно ли сократить?

233
02 декабря 2017, 06:34
if (Api.PlayerCache[player.Uid].LastConnectIp == null) {
    if (player.Ip == Api.PlayerCache[player.Uid].RegisterIp) {
        Api.PlayerCache[player.Uid].Auth = Users.PlayerFlags.Idle;
        Api.PlayerCache[player.Uid].LastConnectIp = Api.PlayerCache[player.Uid].ConnectIp;
        Api.PlayerCache[player.Uid].ConnectIp = player.Ip;
        JsonHelper.SaveFile(Api.PlayerCache, "Users.json");
    } else {
        Api.PlayerCache[player.Uid].Auth = Users.PlayerFlags.Auth;
    }
} else {
    if (Api.PlayerCache[player.Uid].LastConnectIp == player.Ip) {
        Api.PlayerCache[player.Uid].Auth = Users.PlayerFlags.Idle;
        Api.PlayerCache[player.Uid].LastConnectIp = Api.PlayerCache[player.Uid].ConnectIp;
        Api.PlayerCache[player.Uid].ConnectIp = player.Ip;
        JsonHelper.SaveFile(Api.PlayerCache, "Users.json");
    } else {
        Api.PlayerCache[player.Uid].Auth = Users.PlayerFlags.Auth;
    }
}

Возможно хоть чуть-чуть сокрасить? Может дополнение какое-нибудь есть для VS2017? Resharper не предлагать так как он установлен

Answer 1

Если присмотреться, то разница заключается только в том, с чем сравнивается player.Ip. Остальные строки идентичные.

Правило сравнения можно описать так:

Если есть LastConnectIp, то сравнивать с ним, если нет с RegisterIp.

Для этого отлично подойдет оператор ??:

if ((Api.PlayerCache[player.Uid].LastConnectIp ?? Api.PlayerCache[player.Uid].RegisterIp) == player.Ip) {
    Api.PlayerCache[player.Uid].Auth = Users.PlayerFlags.Idle;
    Api.PlayerCache[player.Uid].LastConnectIp = Api.PlayerCache[player.Uid].ConnectIp;
    Api.PlayerCache[player.Uid].ConnectIp = player.Ip;
    JsonHelper.SaveFile(Api.PlayerCache, "Users.json");
} else {
    Api.PlayerCache[player.Uid].Auth = Users.PlayerFlags.Auth;
}
Answer 2

Ну например так:

var currPlayer = Api.PlayerCache[player.Uid];
var ip = currPlayer.LastConnectIp ?? currPlayer.RegisterIp;
if (ip == player.Ip) {
    currPlayer.Auth = Users.PlayerFlags.Idle;
    currPlayer.LastConnectIp = currPlayer.ConnectIp;
    currPlayer.ConnectIp = player.Ip;
    JsonHelper.SaveFile(Api.PlayerCache, "Users.json");
} else {
    currPlayer.Auth = Users.PlayerFlags.Auth;
}
READ ALSO
Виджеты соц сетей

Виджеты соц сетей

Добрый день! Делаю блок социальных кнопок-иконок соц сетей с помощью https://techyandex

332
ecmascript logon error

ecmascript logon error

Я немного изменил plugin для Movian и он проработал ровно 1 деньСейчас не могу разобраться, в чем именно проблема, не логинится

229
Конвертировать MediaStream в base64

Конвертировать MediaStream в base64

Имею следующий код:

258
MongoDB: использование count() одновременно с limit() и skip()

MongoDB: использование count() одновременно с limit() и skip()

Добрый день! Делаю пагинациюДля ее создания мне нужна информация о кол-ве документов удовлетворяющих запросу

225