Die Umsetzung von auf null festlegbaren Typen in Generische Schnittstelle
So, in einer vorherigen Frage habe ich gefragt, über die Implementierung ein generisches interface mit einer öffentlichen Klasse und bingo, es funktioniert. Aber einer von den Typen bin ich auf der Suche nach pass in eine der eingebauten nullable-Typen wie int, Guid, String, etc.
Hier ist mein Interface:
public interface IOurTemplate<T, U>
where T : class
where U : class
{
IEnumerable<T> List();
T Get(U id);
}
Also, wenn ich diese umsetzen und zwar so:
public class TestInterface : IOurTemplate<MyCustomClass, Int32>
{
public IEnumerable<MyCustomClass> List()
{
throw new NotImplementedException();
}
public MyCustomClass Get(Int32 testID)
{
throw new NotImplementedException();
}
}
Erhalte ich die Fehlermeldung: Den Typ 'int' ein Referenztyp sein muss, um es zu verwenden als parameter 'U' im generischen Typ oder Methode " TestApp.IOurTemplate'
Habe ich versucht, zu folgern, der Typ Int32?, aber der gleiche Fehler. Irgendwelche Ideen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde nicht wirklich, dies zu tun, aber es ist wahrscheinlich der einzige Weg, um es zu arbeiten.
Nullable Typen nicht befriedigen
class
oderstruct
Einschränkungen:where T:struct
) und verwendenT?
in der definition der Klasse.Nullable<T>
ist speziell behandelt, von der Laufzeit: wenn ein nicht-null -Nullable<T>
Wert ist geboxt, er ist geboxt, alsT
struct, nichtNullable<T>
. Wenn einnull
nullable-Wert ist boxed, es gibt einfach eine null-Referenz. Die Begründung ist: stellen Sie sich vorint? a = null; if (a == null) {...} object o = a; if (o == null) {...}
Sie wahrscheinlich wollen beideif
Einrichtungen werden konsequent ausgeführt. In der Tat In den frühen Betaversionen von .NET 2.0 eingeführt, die nullable-Typen,Nullable<T>
war nur eine regelmäßige Struktur und?
war nur eine syntaktische...Nullable<T>
Werte. Aufgrund dieser Diskrepanz, Microsoft beschlossen, die änderung der CLR zur Behandlung vonNullable<T>
speziell. Sie können nicht code Ihre eigenenMyNullable<T>
struct und bekommen die gleiche Laufzeit-Semantik.Irgendeinen Grund, warum Sie brauchen, um zu beschränken Typ U-Klasse?
FYI:
int?
ist der C# - Kürzel fürNullable<int>
.