Feedback

C# - IsPositiveInteger as Extension Method

Veröffentlicht von am 7/13/2008
(1 Bewertungen)
Determines whether the given string is a positive integer.
using System.Text.RegularExpressions;

public static class Extensions
{
    public static bool IsPositiveInteger(this string s)
    {
        Regex regex = new Regex(@"^\d*$");
        return regex.IsMatch(s);
    }
}
Abgelegt unter integer, Extension Method, String.

3 Kommentare zum Snippet

Koopakiller schrieb am 10/21/2014:
public static bool IsPositiveInteger(this string s)
{
int x;
return int.TryParse(s, out d) && d > 0;
}
Sollte schneller ausgeführt werden als Regex ;)

Miccolo schrieb am 10/21/2014:
Hey Ihr, Ich finde es immer unschön wenn Ich sowas hier lese da die Seite wirklich gute Snippets hat.
Aber dieses Snippet ist völlig daneben da Extension Methods zur Erweiterung der eigentlich Klasse da sein sollten.
Einen String mit dem Inhalt "ABC" würde in beiden Fällen leider auch False ergeben. Das wäre aber nicht das was man möchte. Wenn man weiß das es ein Integer ist sollte es vorher Konvertiert werden.

Danach brauch ich aber keine weitere Methode um das zu überprüfen.
Einfach:
konvertierterInt > 0 oder konvertierterInt >= 0 // Je nachdem was man möchte aber eigendlich das 2.
Koopakiller schrieb am 10/21/2014:
@Miccolo
Erweiterungsmethoden sind so ein ewiges Streitthema. Ich vertrete dabei die Meinung, dass sie eine geniale Möglichkeit darstellen, solange man sie ordentlich dokumentiert.
Speziell bei dieser Methode würde ich wahrscheinlich keine Erweiterung draus machen, weil sie ein zu spezielles Anwendungsgebiet hat.

Wenn ich allerdings "ABC".IsPositiveInteger() aufrufe, erwarte ich ein False. Eben weil nichts von einer Exception in der Doku steht und weil die Methode vom Namen her prüft ob es eine positive Ganzzahl ist.

Auf was ich hinaus will, die Methode an sich macht für mich Sinn. Als Erweiterung jedoch nicht.

Zudem > oder >=, auch wieder so eine Definitionssache. I.d.R. ist die 0 weder positiv, noch negativ.

PS: In meinem 1. Kommentar hier müsste es natürlich int d; heißen.
 

Logge dich ein, um hier zu kommentieren!