请考虑以下内联代码:
string.Join(",", context.Request.Headers.ToArray())
如果上面的Headers结构是Dictionary(string, string)
,则上面的代码将输出以下内容:
[MyHeaderKey1, MyHeaderVal1],[MyHeaderKey2, MyHeaderVal2]
但是,Dictionary
值为string[]
,因此以下内容会输出:
[MyHeaderKey1, System.String[]],[MyHeaderKey2, System.String[]]
我需要能够像第一个代码示例一样生成输出,但需要生成具有Dictionary
值的string[]
。如果我只取Dictionary
- string[]
值的第一项,那就没问题了。这可以用内联C#来完成吗?
答案 0 :(得分:5)
是。使用Linq Select
。
string.Join(",", context.Request.Headers.Select(x => string.Format("[{0}, {1}]", x.Key, FormatThisArray(x.Value))))
编辑:由于OP提到值为string[]
,因此上述默认x.Value
可能无法产生所需的输出。我不确定OP如何格式化字典项的值,并假设FormatThisArray
是一个格式化数组的函数。
答案 1 :(得分:1)
你需要做这样的事情:
var result =
string.Join(",",
context.Request.Headers.Select(x =>
string.Format(
"[{0},{1}]",
x.Key,
"(" + string.Join(",", x.Value) + ")")));
这会将每个string[]
内的各个项目与,
连接起来,并将它们放在括号内。
输出看起来像这样:
[MyHeaderKey1,(v1,v2,v3)],[MyHeaderKey2,(v4,v5,v6)]
答案 2 :(得分:0)
如果你只需要第一个值:
string.Join(",", context.Request.Headers.Select(d=>new {d.Key,Value=d.Value.FirstOrDefault()}));