SelectMany怎么了?

时间:2018-11-07 22:02:40

标签: c# linq

我遇到了一个SelectMany表达式的问题,我只是束手无策。

考虑一下:我有一个此类的对象集合

class Tag
{
    string DisplayText { get; set; }
    string Key { get; set; }
    int Value { get; set; }
}

现在,我正在尝试获取所有显示文本(实际上是更复杂的表达式的一部分):

var texts = AvailableTags.SelectMany(t => t.DisplayText);

现在为什么这会给我一个IEnumerable<char>而不是一个IEnumerable<string>的信息???我想念什么吗?

1 个答案:

答案 0 :(得分:5)

如果AvailableTags是一个列表(一个IEnumerable),则您只需使用

var texts = AvailableTags.Select(t => t.DisplayText);

使用SelectMany产生的“奇怪”结果是由于字符串完全是char的集合(完全来自@derloopkat)。
因此,您可以想象这样的代码:

class Tag
{
    List<char> DisplayText { get; set; }
    string Key { get; set; }
    int Value { get; set; }
}

使用SelectMany时,您将获取每个DisplayText中包含的所有字符,然后将结果展平。