是否有更简洁的Linq表达式用于在列表中的每个项目之间插入常量?

dev*_*xer 4 c# linq

这就是我现在所拥有的:

public List<double> GetStrokeDashArray(List<double> dashLengths, double gap)
{
    return dashLengths
        .SelectMany(dl => new[] { dl, gap })
        .Take(dashLengths.Count * 2 - 1)
        .ToList();
}
Run Code Online (Sandbox Code Playgroud)

结果 GetStrokeDashArray(new List<double> { 2, 4, 7, 11, 16 }, 2);

2, 2, 4, 2, 7, 2, 11, 2, 16
Run Code Online (Sandbox Code Playgroud)

Tho*_*que 8

我认为最好的方法是为此创建一个特定的扩展方法:

public static IEnumerable<T> Intersperse<T>(this IEnumerable<T> source, T value)
{
    bool first = true;
    foreach(T item in source)
    {
        if (!first) yield return value;
        yield return item;
        first = false;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以按如下方式编写方法:

public List<double> GetStrokeDashArray(List<double> dashLengths, double gap)
{
    return dashLengths
        .Intersperse(gap)
        .ToList();
}
Run Code Online (Sandbox Code Playgroud)