私はHttpContext context
を持っており、情報を収集するためにそのRequest
プロパティのいくつかを反復します。現在、私はそれをこのように実行します。1つの汎用メソッドを使用して、さまざまなタイプの辞書を反復処理するにはどうすればよいですか?
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();
}
とこのようにそれを呼び出す:私はさまざまな組み合わせを試してみましたが、私はまだに管理することができませんでしたcannot convert from 'Microsoft.AspNetCore.Http.IHeaderDictionary' to 'System.Collections.Generic.IDictionary<object, object>'
:私は、このようなエラーが出
result.Headers = ParseKeys<IHeaderDictionary>(context.Request.Headers);
result.Form = ParseKeys<IFormCollection>(context.Request.Form);
result.Query = ParseKeys<IQueryCollection>(context.Request.Query);
しかし、私は一般的な方法を書いてみましたエラーを避ける。私はここで不可能にしようとしているのですか、または私が欲しいことをするのは簡単ですか?ので、ここであなたが一般的な方法を必要としないIEnumerable<KeyValuePair<string, StringValues>>
:あなたは(IHeaderDictionary、IFormCollectionとIQueryCollection)を言及
:
結局、あなたは次のようにメソッドを呼び出すことができます代わりにStringValues> dict'ですか?または 'IEnumerable> dict'? –
mjwills
'dict [key]'がここで文字列に変換されるとどう思いますか?辞書が複雑なクラスオブジェクトの束を保持しているとしたらどうなるでしょうか? – DavidG
しかし、これらの3つのタイプはすべて、 'IEnumerable>'を実装しているので、本当に汎用メソッドは必要ありません。 –
DavidG