Условное присвоение инициализатора C#

В c# инициализаторе я хочу не установить свойство, если условие является ложью.

Что-то вроде этого:

ServerConnection serverConnection = new ServerConnection()  
{  
    ServerInstance = server,  
    LoginSecure = windowsAuthentication,  
    if (!windowsAuthentication)
    {
        Login = user,  
        Password = password  
    }
};

Это может быть сделано? Как?

14
задан Pomber 12 July 2010 в 13:54
поделиться

5 ответов

Вы не можете этого сделать; Инициализаторы C # - это список пар имя = значение. Подробнее см. Здесь: http://msdn.microsoft.com/en-us/library/ms364047 (VS.80) .aspx # cs3spec_topic5

Вам необходимо переместить if на следующую строку.

12
ответ дан 1 December 2019 в 06:03
поделиться

Это невозможно в инициализаторе; вам нужно сделать отдельный if оператор.

В качестве альтернативы вы можете написать

ServerConnection serverConnection = new ServerConnection()  
{  
    ServerInstance = server,  
    LoginSecure = windowsAuthentication,  
    Login = windowsAuthentication ? null : user,  
    Password = windowsAuthentication ? null : password
};

(В зависимости от того, как работает ваш класс ServerConnection)

31
ответ дан 1 December 2019 в 06:03
поделиться

Я подозреваю, что это сработает, но такое использование логики как бы нарушает цель использования инициализатора.

ServerConnection serverConnection = new ServerConnection()  
{  
    ServerInstance = server,  
    LoginSecure = windowsAuthentication,  
    Login = windowsAuthentication ? null : user,
    Password = windowsAuthentication ? null :password
};
6
ответ дан 1 December 2019 в 06:03
поделиться

Примечание: я не рекомендую такой подход, но если это должно быть сделано в инициализаторе (т.е. вы используете LINQ или другое место, где это должно быть одним оператором), вы можете использовать это:

ServerConnection serverConnection = new ServerConnection()
{
    ServerInstance = server,  
    LoginSecure = windowsAuthentication,  
    Login = windowsAuthentication ? null : user,
    Password = windowsAuthentication ? null : password,   
}
4
ответ дан 1 December 2019 в 06:03
поделиться

Как уже говорилось, это нельзя сделать в инициализаторе. Можно ли просто присвоить свойству null вместо того, чтобы не устанавливать его вообще? Если да, то вы можете использовать подход, который указали другие. Вот альтернатива, которая достигает того, что вы хотите, и при этом использует синтаксис инициализатора:

ServerConnection serverConnection;
if (!windowsAuthentication)
{
    serverConection = new ServerConnection()
    {
        ServerInstance = server,
        LoginSecure = windowsAuthentication,
        Login = user,
        Password = password
    };
}
else
{
    serverConection = new ServerConnection()
    {
        ServerInstance = server,
        LoginSecure = windowsAuthentication,
    };
}

На мой взгляд, это не должно иметь большого значения. Если вы не имеете дело с анонимными типами, синтаксис инициализатора - это просто приятная особенность, которая в некоторых случаях может придать вашему коду более опрятный вид. Я бы сказал, что не стоит использовать его для инициализации всех свойств, если при этом страдает читабельность. Нет ничего плохого в том, чтобы вместо этого сделать следующий код:

ServerConnection serverConnection = new ServerConnection()  
{
    ServerInstance = server,
    LoginSecure = windowsAuthentication,
};

if (!windowsAuthentication)
{
    serverConnection.Login = user,
    serverConnection.Password = password
}
3
ответ дан 1 December 2019 в 06:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: