Feedback

C# - Functions verketten

Veröffentlicht von am 03.11.2015
(0 Bewertungen)
Da ich sehr oft Listen auf Grund eines oder mehreren Kriterien ausfiltere, habe ich mir da eine Erleichterungen für das Verketten von Functions geschrieben.
GFU-Schulungen  [Anzeige]

Visual Studio Team Foundation Server 2017/2015 (TFS) für Entwickler - Kompakt

Nach Teilnahme an dieser Schulung kennen Sie alle wesentlichen Funktionen des TFS für Entwickler. Sie setzen Software-Entwicklung mit dem Visual Studio Team Foundation Server erfolgreich um.

C# 2017/2015/2013 Grundlagen

Nach Abschluss des Kurses sind Ihnen die Datentypen und Klassenbibliotheken von C# bekannt. Außerdem sind Sie in der Lage, mit Variablen umzugehen und deren Typen zu konvertieren. Sie definieren Namespaces und setzen diese ein, Sie erstellen eigene Klassen  und bauen Trouble Shooting ein.

namespace System
{
    public static class FuncExtensions
    {
        public enum GroupType
        {
            And,
            Or
        }

        public static Func<T, bool> AndAlso<T>(this Func<T, bool> func1, Func<T, bool> func2)
        {
            if (func1 == null)
                throw new ArgumentNullException(nameof(func1));

            if (func2 == null)
                throw new ArgumentNullException(nameof(func2));

            return a => func1(a) && func2(a);
        }

        public static Func<T, bool> OrElse<T>(this Func<T, bool> func1, Func<T, bool> func2)
        {
            if (func1 == null)
                throw new ArgumentNullException(nameof(func1));

            if (func2 == null)
                throw new ArgumentNullException(nameof(func2));

            return a => func1(a) || func2(a);
        }

        public static Func<T, bool> Grouped<T>(IList<Func<T, bool>> functions, GroupType groupType = GroupType.Or)
        {
            if (functions == null)
                throw new ArgumentNullException(nameof(functions));

            Func<T, bool> result = a => groupType == GroupType.And;

            if (groupType == GroupType.And)
            {
                foreach (var func in functions)
                {
                    result = result.AndAlso(func);
                }
            }

            if (groupType == GroupType.Or)
            {
                foreach (var func in functions)
                {
                    result = result.OrElse(func);
                }
            }

            return result;
        }
    }
}
Abgelegt unter Function, Criteria.

1 Kommentare zum Snippet

Koopakiller schrieb am 03.11.2015:
Ich denke ein Verwendungsbeispiel würde helfen zu verstehen warum deine Methoden einen Vorteil bieten.
 

Logge dich ein, um hier zu kommentieren!