Ich verwende das WPF Extended Toolkit ( Ссылка ).
Es hat ein nettes NumericUpDown-Steuerelement, das ich gerne verwenden würde, aber intern verwendet es doubles - was bedeutet, dass es double.MinValue und double.MaxValue verwendet.
Ich würde gerne das gleiche Steuerelement verwenden, aber ich brauche eine generische Version - für ints muss es int.MaxValue / MinValue, für Floats float.MaxValue / MinValue, etc. verwenden (Ich denke, Sie bekommen die Idee: ))
Also habe ich das NumericUpDown in ein GNumericUpDown kopiert, wobei T natürlich der Typ sein würde. Dies funktioniert jedoch nicht, da ein generischer Type keinen MinValue / MaxValue hat. Und normalerweise würde ich die where-Klausel verwenden, um einen Basistyp anzugeben, aber das funktioniert nicht, da es keine gemeinsame Schnittstelle gibt, die 'MinValue' und 'MaxValue' definiert.
Gibt es eine Möglichkeit, dies mit Generika zu lösen, oder muss ich wirklich das ursprüngliche NumericUpDown für jeden Typ kopieren / einfügen / suchen und ersetzen?
Der OP hat diesen Kommentar zu einer anderen Antwort gemacht:
Ich möchte diese Steuerelemente in meinem verwenden XAML. Meine Idee war, ein Generikum zu erstellen Version, und erstellen Sie dann leere Klassen wie NumericUpDownInt: GNumericUpDown {} Wäre das der Weg zu gehen, oder ist da ein besserer / sauberer Weg zu deinem Wissen
Wenn Sie diese Route gehen, übergeben Sie einfach die Min und Max direkt:
%Vor% Nun, da Sie den Typ zur Ausführungszeit erreichen können, könnten Sie sich auf die Tatsache verlassen, dass alle numerischen Typen in .NET die Felder MinValue
und MaxValue
haben und lies sie mit Reflektion. Es wäre nicht besonders schön, aber einfach genug zu tun:
Beachten Sie, dass, wenn Sie dies mit einem unpassenden Typ verwenden, ich versucht habe, einen Fehler bei der Kompilierung so gut wie möglich zu erzwingen ... aber es wird nicht narrensicher sein. Wenn Sie es schaffen, eine Struktur mit den richtigen Schnittstellen zu finden, aber ohne MinValue
und MaxValue
Felder, dann wird jeder Versuch,% code_% mit diesem Typ zu verwenden, dazu führen, dass eine Ausnahme ausgelöst wird.
Sie sollten den neuesten Quellcode für das erweiterte WPF-Toolkit erhalten. Mit dem aktualisierten NumericUpDown-Steuerelement können Sie angeben, welcher Datentyp im Editor verwendet werden soll. Der folgende Code gibt an, anstelle des Standarddoppelwerts Int32 als Datentyp zu verwenden. Wie Sie sehen, wird dies getan, indem die ValueType-Eigenschaft für das NumericUpDown-Steuerelement festgelegt wird.
%Vor%Da dies auch in Testszenarien nützlich ist:
Sie können Erweiterungsmethoden verwenden, so dass Sie in C # 6 (mit nameof
) schreiben könnten:
und durch einige zugegebenermaßen hässliche Syntax aufrufen:
%Vor%was in Ihrer generischen Methode wäre
%Vor% Beachten Sie, dass ich nicht sicher bin, dass alle primitiven Typen ihre Min / Max-Werte als Konstanten deklarieren. Verwenden Sie stattdessen GetValue
.
Tags und Links c# generics floating-point double int