我正在使用"BrowserSession"并添加了2个变量来跟踪用户名和密码,以登录网站。
A: 2
B: 2
C: 2
D: 0
F: 1
**
**
**
*
我还添加了这个设置_username和_password变量的函数
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;
然而
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)
”
任何人都知道变通方法或解决方案?我不想传递用户名和密码每次调用RefreshAccountData方法时,如果在第一次浏览器登录之前调用它,我希望能够从中设置用户名和密码变量。
我可能只是完全错过了一个非常简单的方法来做到这一点。但我似乎无法想到任何事情。
答案 0 :(得分:3)
如果传递null,则可以默认为null并使用这些变量:
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");
}
或者您可以提供第二种方法,它不会接受这些参数并将变量传递给您的main方法,这可以让您在调用者实际尝试传递碰巧为null的用户名或密码时捕获抛出错误。
public StoredAccountInfo RefreshAccountData()
{
RefreshAccountData(_username, _password);
}
答案 1 :(得分:1)
您不能将变量用作可选参数。您必须声明方法的重载。好难过! :(
public StoredAccountInfo RefreshAccountData() {
return RefreshAccountData (_username, _password);
}
不幸的是,无法使用可选参数。
让我解释一下为什么你不能。可选参数值将放入已编译的代码中。因此,如果您更改变量的值,编译的代码将不会更改,对吧?长话短说,编译后的代码无法检测到变量值的变化。
答案 2 :(得分:1)
重载方法:
public void BrowserLogin(string username, string password)
{
...
}
public void BrowserLogin(string username)
{
BrowserLogin(username, _password);
}
public void BrowserLogin()
{
BrowserLogin(_username, _password);
}
参数对象:
public class LoginParams
{
public string UserName { get; set; }
public string Password { get; set; }
}
public void BrowserLogin(LoginParams aParams)
{
if (aParams.UserName == null)
<use this._username>
if (aParams.Password == null)
<use this._password>
...
}
BrowserLogin(new LoginParams());
BrowserLogin(new LoginParams() { UserName = username });
BrowserLogin(new LoginParams() { UserName = username, Password = password });