是否有一个声明将元素T添加到IEnumerable <T>

jyo*_*ung 22 c# linq

例如:

string element = 'a';
IEnumerable<string> list = new List<string>{ 'b', 'c', 'd' };

IEnumerable<string> singleList = ???; //singleList yields 'a', 'b', 'c', 'd' 
Run Code Online (Sandbox Code Playgroud)

Mar*_*ell 34

我认为你不能只Insert进入现有的清单?

好吧,你可以用new[] {element}.Concat(list).

否则,您可以编写自己的扩展方法:

    public static IEnumerable<T> Prepend<T>(
            this IEnumerable<T> values, T value) {
        yield return value;
        foreach (T item in values) {
            yield return item;
        }
    }
    ...

    var singleList = list.Prepend("a");
Run Code Online (Sandbox Code Playgroud)

  • @Ian:我认为你的意思是从K&R开始的The One True Brace Style. (6认同)
  • @Ian - 我在论坛上使用这种支撑方式来保留垂直空间.对于实际的代码,老实说,我不关心大括号的风格. (4认同)

jal*_*alf 5

你可以自己动手:

static IEnumerable<T> Prepend<T>(this IEnumerable<T> seq, T val) {
 yield return val;
 foreach (T t in seq) {
  yield return t;
 }
}
Run Code Online (Sandbox Code Playgroud)

然后使用它:

IEnumerable<string> singleList = list.Prepend(element);
Run Code Online (Sandbox Code Playgroud)

  • 我认为它应该是foreach中的"yield return t",并且该方法应该是静态的 (2认同)

BFr*_*ree 5

public static class IEnumerableExtensions
{
    public static IEnumerable<T> Prepend<T>(this IEnumerable<T> ie, T item)
    {
         return new T[] { item }.Concat(ie);
    }
}
Run Code Online (Sandbox Code Playgroud)