myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns
» Datenschutzerklärung
» Impressum

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Gemeinschaft » .NET-Komponenten und C#-Snippets » Generische ExtensionMethode zum prüfen ob sich Wert innerhalb/ausserhalb/auf der Grenze befindet
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Generische ExtensionMethode zum prüfen ob sich Wert innerhalb/ausserhalb/auf der Grenze befindet

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Programmierhans
myCSharp.de-Poweruser/ Experte

avatar-1651.gif


Dabei seit: 05.04.2005
Beiträge: 4.221
Entwicklungsumgebung: VS2003-VS2013 / SAP WebIDE
Herkunft: Zentralschweiz


Programmierhans ist offline

Generische ExtensionMethode zum prüfen ob sich Wert innerhalb/ausserhalb/auf der Grenze befindet

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

RangeCheck-Extension für IComparable:

Eine kurze generische ExtensionMethode um zu prüfen ob sich ein Wert innerhalb / ausserhalb oder auf der Grenze befindet.

C#-Code:
    public static class Extensions
    {
        public static RangeCheck IsInRange<T>(this T pValue, T pBorder1, T pBorder2) where T: IComparable
        {
            return (RangeCheck)(Math.Sign(pBorder1.CompareTo(pBorder2)) == 0 ?
                Math.Abs(Math.Sign(pValue.CompareTo(pBorder1))) + 1 :
                Math.Abs(Math.Sign(pValue.CompareTo(pBorder1)) + Math.Sign(pValue.CompareTo(pBorder2))));
        }
    }



    public enum RangeCheck
    {
        Inside = 0,
        Border = 1,
        Outside = 2
    }


TestCode:

        private void Test()
        {

            int border1 = 3;
            int border2 = 7;

            System.Diagnostics.Debug.WriteLine("RealBorder (3-7)");

            for (int value = 1; value < 10; value++)
            {
                System.Diagnostics.Debug.WriteLine("{0}={1}", value, value.IsInRange(border1, border2));
            }


            border1 = 5;
            border2 = 5;

            System.Diagnostics.Debug.WriteLine("EqualBorder (5)");

            for (int value = 1; value < 10; value++)
            {
                System.Diagnostics.Debug.WriteLine("{0}={1}", value, value.IsInRange(border1, border2));
            }
        }
    }

Ausgabe:

RealBorder 3-7
1=Outside
2=Outside
3=Border
4=Inside
5=Inside
6=Inside
7=Border
8=Outside
9=Outside

EqualBorder (5)
1=Outside
2=Outside
3=Outside
4=Outside
5=Border
6=Outside
7=Outside
8=Outside
9=Outside


Edit: herbivore hat natürlich Recht... (Math.Sign eingebaut)


Range Check IComparable Extension

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Programmierhans am 11.04.2017 15:50.

11.04.2017 15:15 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
herbivore
myCSharp.de-Poweruser/ Experte

avatar-2627.gif


Dabei seit: 11.01.2005
Beiträge: 49.453
Entwicklungsumgebung: csc/nmake (nothing is faster)
Herkunft: Berlin


herbivore ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Programmierhans,

eine  IComparable.CompareTo-Methode ist nicht dazu verpflichtet, nur die Werte -1, 0 oder 1 zu liefert, sondern kann beliebige Integer-Werte liefert. Das kommt praktisch auch durchaus vor, sogar bei Klassen aus dem .NET-Framework(*). Du kannst die Rückgabewerte also nicht einfach so addieren, sondern müsstest vorher noch  Math.Sign darauf anwenden.

herbivore

(*) Das sieht man [in der ursprünglichen Version ohne Math.Sign] zum Beispiel, wenn man in deinem Testcode überall int durch short ersetzt.
11.04.2017 15:38 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Programmierhans
myCSharp.de-Poweruser/ Experte

avatar-1651.gif


Dabei seit: 05.04.2005
Beiträge: 4.221
Entwicklungsumgebung: VS2003-VS2013 / SAP WebIDE
Herkunft: Zentralschweiz

Themenstarter Thema begonnen von Programmierhans

Programmierhans ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo herbivore

Danke für den Hinweis.
Habe ich sofort angepasst.

Gruss
Programmierhans
11.04.2017 15:51 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Zwischen diesen beiden Beiträgen liegen mehr als 6 Monate.
Luschi
myCSharp.de-Mitglied

Dabei seit: 20.06.2014
Beiträge: 5
Herkunft: klein-Paris


Luschi ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Programmierhans,

habe gerade diese interessante Extension unter Nutzung von enum erfolgreich implementiert.

danke sagt Luschi
aus klein-Paris
21.10.2017 17:42 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 2 Jahre.
Der letzte Beitrag ist älter als ein Jahr.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 22.05.2019 13:13