Feedback

C# - Enum-Extensions für .Net Compact Framework 3.5

Veröffentlicht von am 06.11.2009
(2 Bewertungen)
Diese Extensions für System.Enum geben die Möglichkeit unter dem .Net Compact Framework 3.5 Instanzen einer Enum nach einem bestimmten Wert der Enum zu prüfen und ein Array von System.Enum zu erstellen, dass alle Werte einer Instanz einer Enum enthält.
GFU-Schulungen  [Anzeige]

C# Komplett

Sie kennen sich in objektorientierter Programmierung aus. Sie schreiben C++ oder Java? Und nun stehen Sie vor der Aufgabe, in C# Anwendungen zu erstellen. Das C# Komplett-Seminar verschafft Ihnen umfassende Programmierkenntnisse in dieser Sprache. Nach der Schulung entwickeln Sie selbständig Anwendungen mit C#. Sie kennen die Datentypen und Klassenbibliotheken der objektorientierten Programmiersprache C#. Der Komplettkurs setzt bei den Grundlagen von C# ein. Sie arbeiten mit Variablen und konvertieren Typen. Multithreading, Delegates, Generics sind nach dem Seminar für Sie kein Geheimnis mehr.

XML und .NET Überblick

Um auf dem neuesten Wissensstand zu sein, sollten Sie unser aktuelles ASP .NET Komplett Seminar belegen.
Nach dem Seminar kennen Sie die wichtigsten Strömungen in der Software-Technologie

using System;
using System.Linq;
using System.Collections.Generic;
using System.Text;

namespace Test
{
    static class EnumExtensions
    {

        /// <summary>
        /// Prüft, ein bestimmter Enum-Wert in einer Instanz einer Enum vorhanden ist
        /// </summary>
        /// <param name="instance"></param>
        /// <param name="flags">System.Enum, Wert der Enum, der geprüft werden soll</param>
        /// <returns>System.Boolean</returns>
        public static System.Boolean Obtain(this System.Enum instance, System.Enum flags)
        {

            System.Int32 ls = 0;

            try
            {

                //prüfen
                if (System.Enum.GetUnderlyingType(instance.GetType()) == typeof(uint))
                {

                    ls = 10;
                    //Rückgabewert setzen
                    return (System.Convert.ToUInt32(instance) & System.Convert.ToUInt32(flags)) != 0;

                }
                else if (System.Enum.GetUnderlyingType(instance.GetType()) == typeof(int))
                {

                    ls = 20;
                    //Rückgabewert setzen
                    return (System.Convert.ToInt32(instance) & System.Convert.ToInt32(flags)) != 0;

                }
                else if (System.Enum.GetUnderlyingType(instance.GetType()) == typeof(byte))
                {

                    ls = 30;
                    //Rückgabewert setzen
                    return (System.Convert.ToByte(instance) & System.Convert.ToByte(flags)) != 0;

                }
                else if (System.Enum.GetUnderlyingType(instance.GetType()) == typeof(sbyte))
                {

                    ls = 40;
                    //Rückgabewert setzen
                    return (System.Convert.ToSByte(instance) & System.Convert.ToSByte(flags)) != 0;
                    
                }
                else if (System.Enum.GetUnderlyingType(instance.GetType()) == typeof(short))
                {

                    ls = 50;
                    //Rückgabewert setzen
                    return (System.Convert.ToInt16(instance) & System.Convert.ToInt16(flags)) != 0;

                }
                else if (System.Enum.GetUnderlyingType(instance.GetType()) == typeof(ushort))
                {

                    ls = 60;
                    //Rückgabewert setzen
                    return (System.Convert.ToUInt16(instance) & System.Convert.ToUInt16(flags)) != 0;

                }
                else if (System.Enum.GetUnderlyingType(instance.GetType()) == typeof(long))
                {

                    ls = 70;
                    //Rückgabewert setzen
                    return (System.Convert.ToInt64(instance) & System.Convert.ToInt64(flags)) != 0;

                }
                else if (System.Enum.GetUnderlyingType(instance.GetType()) == typeof(ulong))
                {

                    ls = 80;
                    //Rückgabewert setzen
                    return (System.Convert.ToUInt64(instance) & System.Convert.ToUInt64(flags)) != 0;

                }

                //Rückgabewert setzen
                return false;

            }
            catch (System.Exception ex)
            {

                //Fehler anzeigen
                System.Diagnostics.Debug.WriteLine(System.DateTime.Now.ToString() + " - System.Boolean Obtain(System.Enum, System.Enum) - " + ls.ToString() + " - " + ex.Message.ToString() + " - " + ex.StackTrace.ToString());

                //Rückgabewert setzen
                return false;

            }

        }


        /// <summary>
        /// Erstellt ein Array von System.Enum, das nur die Werte der Instanz enthält
        /// </summary>
        /// <param name="instance"></param>
        /// <returns>System.Enum[]</returns>
        public static System.Enum[] ContainedValues(this System.Enum instance)
        {

            System.Int32 ls = 0;
            
            try
            {

                //Type ermitteln
                System.Type et = instance.GetType();

                //Array von FieldInfo erstellen
                System.Reflection.FieldInfo[] fi = et.GetFields(System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public);

                //Array von System.Enum erstellen => Rückgabewert
                //System.Enum[] values = new System.Enum[fi.Length];
                System.Collections.Generic.List<System.Enum> values = new List<System.Enum>();

                //alle Felder von instance durchlaufen
                for (int iEnum = 0; iEnum < fi.Length; iEnum++)
                {

                    //prüfen, ob der Wert vorhanden ist
                    if (instance.Obtain((System.Enum)fi[iEnum].GetValue(instance)) == true)
                    {
                        //values[index] = (System.Enum)fi[iEnum].GetValue(instance);
                        values.Add((System.Enum)fi[iEnum].GetValue(instance));
                       
                    }

                }


                //values.Count prüfen
                if (values.Count == 0)
                {

                    //0-Wert setzen
                    values.Add((System.Enum)System.Enum.Parse(et, "0", true));

                }

                //Rückgabewert setzen
                return values.ToArray();

            }
            catch (System.Exception ex)
            {

                //Fehler anzeigen
                System.Diagnostics.Debug.WriteLine(System.DateTime.Now.ToString() + " - System.Enum[] ContainedValues(System.Enum) - " + ls.ToString() + " - " + ex.Message.ToString() + " - " + ex.StackTrace.ToString());

                //Rückgabewert erstellen
                System.Enum[] retValue = new System.Enum[0];
                retValue[0] = (System.Enum)System.Enum.Parse(instance.GetType(), "0", true);

                //Rückgabewert setzen
                return retValue;

            }

        }

    }

}

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!