Feedback

Kleine Array-Erweiterung

Sprache: C#

Hallöchen, da ich mir gestern das Snippet "Array zur Laufzeit erweitern" von EffEff angesehen habe, und eine kleine Verbesserung vorgeschlagen habe, ist mir doch glatt noch eine elegantere Lösung eingefallen. Warum nicht einfach Resize und Append per Erweitungsmethoden zur Verfügung stellen? Leider ist es aber so, dass nur Referenz-Typen in einer Erweiterungsmethode geändert werden können. Daher muss beim Aufruf der Resize-Funktion eine Zuweisung zu einem neuen Array erfolgen. Hier meine zwei Array-Erweiterungen
    /// <summary>
    /// 
    /// </summary>
    public static class ArrayExtensions
    {
        /// <summary>
        /// 
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="Source"></param>
        /// <param name="NewSize"></param>
        public static T[] Resize<T>(this T[] Source, int NewSize)
        {
            Array.Resize<T>(ref Source, NewSize);
            return Source;
        }
        /// <summary>
        /// 
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="Source"></param>
        /// <param name="NewElement"></param>
        public static T[] Append<T>(this T[] Source, T NewElement)
        {
            Source = Source.Resize(Source.Length + 1);
            Source[Source.Length - 1] = NewElement;
            return Source;
        }
    }
    /// <summary>
    /// 
    /// </summary>
    public static class ArrayExtensions
    {
        /// <summary>
        /// 
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="Source"></param>
        /// <param name="NewSize"></param>
        public static T[] Resize<T>(this T[] Source, int NewSize)
        {
            Array.Resize<T>(ref Source, NewSize);
            return Source;
        }
        /// <summary>
        /// 
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="Source"></param>
        /// <param name="NewElement"></param>
        public static T[] Append<T>(this T[] Source, T NewElement)
        {
            Source = Source.Resize(Source.Length + 1);
            Source[Source.Length - 1] = NewElement;
            return Source;
        }
    }

3 Kommentare

  1. Ich finde deine Lösung sehr elegant und muss gestehen dass ich bisher nicht daran gedacht hatte eine Extension dafür zu schreiben. Nichts desto trotz muss ich sagen das mir persönlich Generic Lists besser gefallen als Arrays (mir ist bewusst das diese langsamer sind). Man kann aber mit diese einfach und unkompliziert verändert (d.h. Remove und Add aufrufen) und brauch keine Extensions schreiben.

    Lg Fawk_18