Does C# 7 have array/enumerable destructuring?

后端 未结 8 1658
你的背包
你的背包 2020-12-15 15:16

In Javascript ES6, you are able to destructure arrays like this:

const [a,b,...rest] = someArray;

where a is the first element

8条回答
  •  心在旅途
    2020-12-15 15:51

    In C# you will need to write your own, like this one I'm using:

    public static class ArrayExtensions
        {
            public static void Deconstruct(this T[] array, out T first, out T[] rest)
            {
                first = array.Length > 0 ? array[0] : default(T);
                rest = array.Skip(1).ToArray();
            }
    
            public static void Deconstruct(this T[] array, out T first, out T second, out T[] rest)
                => (first, (second, rest)) = array;
    
            public static void Deconstruct(this T[] array, out T first, out T second, out T third, out T[] rest)
                => (first, second, (third, rest)) = array;
    
            public static void Deconstruct(this T[] array, out T first, out T second, out T third, out T fourth, out T[] rest)
                => (first, second, third, (fourth, rest)) = array;
    
            public static void Deconstruct(this T[] array, out T first, out T second, out T third, out T fourth, out T fifth, out T[] rest)
                => (first, second, third, fourth, (fifth, rest)) = array;
    
    // .. etc.
        }
    

    Then simply do:

    var (first, second,_ , rest) = new[] { 1, 2, 3, 4 }
    

提交回复
热议问题