我有一個HttpContext context
,我遍歷它的一些Request
屬性來收集信息。目前我做這種方式:如何使用一種通用方法遍歷不同類型的字典?
if (context.Request.Headers?.Keys != null)
{
var items = new StringBuilder();
foreach (var key in context.Request.Headers.Keys)
{
items.AppendLine(key + " = " + context.Request.Headers[key]);
}
result.Headers = items.ToString();
}
if (context.Request.Form?.Keys != null)
{
var items = new StringBuilder();
foreach (var key in context.Request.Form.Keys)
{
items.AppendLine(key + " = " + context.Request.Form[key]);
}
result.Form = items.ToString();
}
if (context.Request.Query?.Keys != null)
{
var items = new StringBuilder();
foreach (var key in context.Request.Query.Keys)
{
items.AppendLine(key + " = " + context.Request.Query[key]);
}
result.Query = items.ToString();
}
我想這個重複的代碼轉換爲一個通用的方法(如果你能提出任何其他的方式,我會被罰款和他們,太)。我試着寫一個通用的方法:
private static string ParseKeys<T>(IDictionary<object, object> dict)
{
var sb = new StringBuilder();
foreach (var key in dict.Keys)
{
sb.AppendLine(key + " = " + dict[key]);
}
return sb.ToString();
}
並調用它像這樣:
result.Headers = ParseKeys<IHeaderDictionary>(context.Request.Headers);
result.Form = ParseKeys<IFormCollection>(context.Request.Form);
result.Query = ParseKeys<IQueryCollection>(context.Request.Query);
,但我得到這樣的錯誤:cannot convert from 'Microsoft.AspNetCore.Http.IHeaderDictionary' to 'System.Collections.Generic.IDictionary<object, object>'
我嘗試各種組合,但我還是沒能設法避免錯誤。我想在這裏做不可能的事,還是有一種簡單的做我想做的事?你提到(IHeaderDictionary,IFormCollection和IQueryCollection)所有
如果你改變'ParseKeys'採取'的IDictionary <字符串會發生什麼, StringValues> dict'而不是?或者'IEnumerable> dict'? –
mjwills
您如何期待'dict [key]'在這裏轉換爲字符串?例如,如果字典包含一堆複雜的類對象,例如? – DavidG
但是你提到的所有3種類型都實現了'IEnumerable>'所以你真的不需要泛型方法。 –
DavidG