Warum wird diese generische Methode benötigen, T um einen öffentlichen, parameterlosen Konstruktor?
public void Getrecords(ref IList iList,T dataItem)
{
iList = Populate.GetList<dataItem>() //GetListis defined as GetList<T>
}
dataItem kann sein meine um Objekt-oder Benutzer-Objekt, das entscheidet zur Laufzeit.Die oben nicht funktioniert, wie es gibt mir diese Fehlermeldung
Der Typ 'T' muss einen öffentlichen parameterlosen Konstruktor, um es zu verwenden als parameter " T " in der generischen Typ
- Sie Frage ist sehr vage und schwer zu verstehen..., was wollen Sie tun?
- formatiert meine Frage
- Warum ist dieser Kerl immer abgestimmt ist, die einfach nur eine Frage?
- Können Sie näher erläutern, was dataItem nicht hier? Es kann nicht verwendet werden, weil der generische Typ argument (T, kann). Also was bringt es?
- Re die Antwort (auf mein post) - also nicht einem der beiden Szenarien, die ich geschrieben helfen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was suchst du?
Überarbeitete Frage:
"dataitem" ist eine variable. Sie möchten einen Typ da:
Dies ist zu sagen, dass, wenn Sie definiert Auffüllen.GetList(), Sie erklärt es so:
Sagt der compiler, dass GetList kann nur Typen verwendet werden, die einen öffentlichen parameterlosen Konstruktor. Verwenden Sie T zum erstellen eines GetList-Methode GetRecords (T bezieht sich auf verschiedene Typen hier), haben Sie die gleiche Einschränkung auf ihn:
Ihre überarbeitete Frage geht in dataItem-Objekt als ein Objekt des Typs T und versucht dann, es zu benutzen, als eine Art argument zu GetList(). Vielleicht passieren Sie dataItem in nur als ein Weg zu geben Sie T?
Wenn ja, möchten Sie vielleicht so etwas wie:
Dann nennt man das etwa so:
Das Problem mit fordern einen öffentlichen, parameterlosen Konstruktor kann nur werden, weil Bevölkern.GetList es verlangt - d.h. "T : new ()" - Einschränkung. Um dies zu beheben, fügen Sie einfach die gleiche Einschränkung Ihrer Methode.
Tatsächlich, ich bezweifle, dass
ref
ist eine gute Strategie hier. Bei einem Stoßout
tun könnten (da Sie nicht gelesen den Wert), aber eine viel einfachere (und mehr erwartet) - option Rückgabewert:Natürlich, an diesem Punkt, der Anrufer könnte genauso gut einfach anrufen
Populate.GetList
direkt!Ich vermute, Sie können entfernen dataItem zu... aber es ist nicht ganz klar aus der Frage.
Wenn Sie nicht beabsichtigen, es zu werden generische (und dataItem ist das template-Objekt), dann können Sie dies über
MakeGenericMethod
:Können Sie Generisch mit < T > wird akzeptieren, dass die Art in der runtime, wie Sie wollen.
Diese sollte keine weitere detaillierte Informationen, die Sie benötigen.
http://msdn.microsoft.com/en-us/library/twcad0zb(VS.80).aspx