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]

JavaScript für .NET-Entwickler

Sie sind .NET-Entwickler und nun stehen Sie vor der Aufgabe, JavaScript in Ihre Arbeit einzubinden. Die Schulung vermittelt Ihnen die JavaScript Grundlagen und die Funktionen der Scriptsprache. Sie wissen, wie objektorientierte Programmierung in JavaScript funktioniert und lernen abschließend Best Practicies Fälle kennen.

C# Aufbaukurs

Sie haben grundlegende .NET- und C#-Kenntnisse und und wollen diese nun erweitern. Der Aufbaukurs C# führt Sie ein die Arbeit mit Interfaces und Delegates, Generics und Parallel Computing.

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!