2015-11-12 3 views
0

Я использую "BrowserSession" и добавил 2 переменные для отслеживания имени пользователя и пароля, для входа на сайт.Можно ли использовать переменную как параметр по умолчанию в C#?

private string _username; 
    private string _password; 

    public StoredAccountInfo RefreshAccountData(string username = _username, string password = _password) 
    { 
     if ((string.IsNullOrEmpty(username)) || (string.IsNullOrEmpty(password)) 
     { 
      //throw Exception("Password Or Username Not Set"); 
     } 
     BrowserLogin(username, password);//In case user is not logged in 
     StoredAccountInfo retdata = new StoredAccountInfo(); 
     //populate retdata 
     return retdata; 

Я также добавил эту функцию, которая устанавливает _username и _password переменные

public void BrowserLogin(string username, string password) 
    { 
     if (Cookies == null) 
     { 
      //Do Site Login Here If not Logged In 
      Get(constants.BaseUrl); 
      FormElements["UserName"] = username; 
      FormElements["PassWord"] = password; 
      Post(constants.loginUrl); 
      _username = username; 
      _password = password; 
     } 
    } 

Однако

public StoredAccountInfo RefreshAccountData(string username = _username, string password = _password) 

дает мне ошибку синтаксиса "default parameter value for 'username' must be a compile-time constant"

Кто-нибудь знает обходной путь или решение? Я не хочу передавать имя пользователя и пароль. Каждый раз я вызываю метод RefreshAccountData, однако, если он вызывается до первого входа в браузер, я хотел бы иметь возможность устанавливать из него переменные имени пользователя и пароля.

Я мог бы просто полностью потерять действительно простой способ сделать это. Но я не могу ни о чем думать.

+0

Как насчет вас просто перегружать метод? Не пытайтесь сделать необязательные параметры, чтобы они не делали. – jmcilhinney

+0

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

+0

@JasonBrown Я никогда не видел кого-то, кто изучал дополнительные параметры, но не перегружал ... Сначала вы должны научиться перегрузке. – Sweeper

ответ

1

Перегруженные методы:?.

public void BrowserLogin(string username, string password) 
{ 
... 
} 

public void BrowserLogin(string username) 
{ 
    BrowserLogin(username, _password); 
} 

public void BrowserLogin() 
{ 
    BrowserLogin(_username, _password); 
} 

Объект параметра:

+0

Только вопрос, который у меня есть об этом, Не для этой ситуации конкретно, но в более общем плане, можно ли установить пароль только с помощью перегрузок (так что у вас есть опции для установки только имени пользователя или просто пароля?) С использованием имен параметров? –

+0

К сожалению - нет. Вы можете сделать это в стиле «javascript» - см. Обновление. – Igor

3

Вы можете по умолчанию нулевого значения и использовать эти переменные, если нуль передается:

public StoredAccountInfo RefreshAccountData(string username = null, string password = null) 
{ 
    username = username ?? _username; 
    password = password ?? _password; 
    if ((string.IsNullOrEmpty(username)) || 
     (string.IsNullOrEmpty(password)) 
    { 
     //throw Exception("Password Or Username Not Set"); 
    } 

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

public StoredAccountInfo RefreshAccountData() 
{ 
    RefreshAccountData(_username, _password); 
} 
1

Вы не можете использовать переменные в качестве дополнительных параметров. Вы должны объявить перегрузку метода. Так грустно! :(

public StoredAccountInfo RefreshAccountData() { 
    return RefreshAccountData (_username, _password); 
} 

Там нет никакого способа, чтобы использовать дополнительные параметры для этого, к сожалению.

Позвольте мне объяснить, почему вы не можете. Необязательные значения параметров помещаются в скомпилированный код. Так что если вы измените значение переменной, скомпилированный код не изменится, право Короче говоря, скомпилированный код не может определить значение переменной изменилось

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