【发布时间】:2015-11-12 04:49:13
【问题描述】:
我正在使用"BrowserSession" 并添加了 2 个变量来跟踪用户名和密码,以登录网站。
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 方法时都传递用户名和密码,但是如果在第一次浏览器登录之前调用它,我希望能够从中设置用户名和密码变量。
我可能只是完全错过了一种非常简单的方法来做到这一点。但我似乎想不出来。
【问题讨论】:
-
重载方法怎么样?不要再试图让可选参数做他们不应该做的事情。
-
我不确定重载是如何工作的。虽然我会调查一下,但奇怪的是,我发现它们相当混乱。但是,有很多答案可以满足我的需要。
-
@JasonBrown 我从来没有见过有人学会了可选参数但不会重载......你应该先学习重载。
-
@Sweeper 通过反复试验学习自己,我一直在跳过一堆语言(java/c++/c#/etc)。但是我在了解重载的工作原理之前就发现了可选参数。
-
感谢所有快速答复。我终于应该研究一下超载了,我猜我已经推迟了太久了。