可以使用c#中的内联代码输出此值吗?

时间:2016-02-08 21:28:07

标签: c# .net

请考虑以下内联代码:

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#来完成吗?

3 个答案:

答案 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()}));