Return 字典<String,String> + 来自任务的 CookieContainer cookie
Return dictionary<String,String> + CookieContainer cookies from task
我有一些代码可以运行 return 字典的任务...但有时我需要它来 return 字典和带有 cookie 的 cookiecontainer ...这是代码
static public async Task<Dictionary<String,String>> login(string server, string id, string pw)
{
CookieContainer cookies = new CookieContainer();
HttpWebRequest newRequest = GetNewRequest(server, cookies);
Dictionary<string, string> dictionary2 = new Dictionary<string, string>();
dictionary2.Add("name", id);
dictionary2.Add("password", pw);
dictionary2.Add("uni_url", server);
Dictionary<string, string> parameters = dictionary2;
HttpWebResponse response = await MakeRequest(newRequest, cookies, "login", server, parameters);
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
if (!reader.EndOfStream)
{
Dictionary<String, String> answer = new Dictionary<string, string>();
answer.Add("HTML", reader.ReadToEnd());
return answer;// here i need it to return CookieContainer .
}
}
Dictionary<String, String> answerFailed = new Dictionary<string, string>();
answerFailed.Add("LoginFailed", "LoginFailed! No Internet Connection!");
return answerFailed;
}
我的问题:我如何 return 同一方法中的两个不同的东西?
如果您可以更改方法,您可以使用 Tuple<T1,T2>
到 return 来自任务的两个值:
static public async Task<Tuple<Dictionary<String,String>,CookieContainer>> login(string server, string id, string pw)
{
CookieContainer cookies = new CookieContainer();
Dictionary<string, string> dictionary2 = new Dictionary<string, string>();
// create result tuple
var result = Touple.create(dictionary2,cookies);
return result;
}
重载功能帮不了你,因为只有参数应该不同。
在这些情况下,我通常会创建一个新的 class,其中包含您需要的所有属性作为输出,return 来自任务的这些 classe 的实例。
开销很小,是未来扩展的好模式。
我有一些代码可以运行 return 字典的任务...但有时我需要它来 return 字典和带有 cookie 的 cookiecontainer ...这是代码
static public async Task<Dictionary<String,String>> login(string server, string id, string pw)
{
CookieContainer cookies = new CookieContainer();
HttpWebRequest newRequest = GetNewRequest(server, cookies);
Dictionary<string, string> dictionary2 = new Dictionary<string, string>();
dictionary2.Add("name", id);
dictionary2.Add("password", pw);
dictionary2.Add("uni_url", server);
Dictionary<string, string> parameters = dictionary2;
HttpWebResponse response = await MakeRequest(newRequest, cookies, "login", server, parameters);
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
if (!reader.EndOfStream)
{
Dictionary<String, String> answer = new Dictionary<string, string>();
answer.Add("HTML", reader.ReadToEnd());
return answer;// here i need it to return CookieContainer .
}
}
Dictionary<String, String> answerFailed = new Dictionary<string, string>();
answerFailed.Add("LoginFailed", "LoginFailed! No Internet Connection!");
return answerFailed;
}
我的问题:我如何 return 同一方法中的两个不同的东西?
如果您可以更改方法,您可以使用 Tuple<T1,T2>
到 return 来自任务的两个值:
static public async Task<Tuple<Dictionary<String,String>,CookieContainer>> login(string server, string id, string pw)
{
CookieContainer cookies = new CookieContainer();
Dictionary<string, string> dictionary2 = new Dictionary<string, string>();
// create result tuple
var result = Touple.create(dictionary2,cookies);
return result;
}
重载功能帮不了你,因为只有参数应该不同。
在这些情况下,我通常会创建一个新的 class,其中包含您需要的所有属性作为输出,return 来自任务的这些 classe 的实例。 开销很小,是未来扩展的好模式。