Je dois créer une instance sans paramètre pour une classe générique en C#.comment créer une instance pour un type générique dans C#
Comment faire.
Je dois créer une instance sans paramètre pour une classe générique en C#.comment créer une instance pour un type générique dans C#
Comment faire.
Vous pouvez ajouter la contrainte : new()
:
void Foo<T>() where T : class, new() {
T newT = new T();
// do something shiny with newT
}
Si vous ne disposez pas de la contrainte, alors Activator.CreateInstance<T>
peut aider (moins la compilation de vérification):
void Foo<T>() {
T newT = Activator.CreateInstance<T>();
// do something shiny with newT
}
Si vous voulez dire vous le type lui-même, alors probablement quelque chose comme:
Type itemType = typeof(int);
IList list = (IList)Activator.CreateInstance(
typeof(List<>).MakeGenericType(itemType));
+1 Il peut être intéressant de souligner que les deux exemples de code font la même chose à l'exécution (c'est-à-dire utilisent la classe 'Activator'). Vous appelez la vérification à la compilation, mais vous pouvez vouloir en savoir un peu plus sur ce que vous voulez dire. –
@Andrew Hare: Point intéressant! J'aurais supposé T newT = new T() serait fait lorsque le code Foo
Pour faire suite au point d'Andrew; la contrainte ': new()' permet de vérifier le code d'appel lorsque vous cliquez sur "build", mais en réalité cela se résume à la même IL (pour des détails d'implémentation différents). Cela fonctionnera bien sans cela, mais si vous appelez 'Foo
Voulez-vous dire sans argu générique ments? Comme nouvelle liste <>()? – Elisha