Je reçois le type mais ce n'est pas la même chose que la classe qui est ce que je cherche.
existe une opération inverse de typeof? p>
J'ai besoin de la classe afin d'utiliser un référentiel générique: p>
GenericRepository<BaseEntity> repository = new GenericRepository<BaseEntity>(new AzureBrightData());
8 Réponses :
Utilisez la nouvelle contrainte ().
public T Create<T>() where T : new() { return new T(); }
Ou simplement utiliser l'activateur intégré.createInstance
Si j'ai compris des réponses sous votre question que vous cherchez peut-être quelque chose comme ceci (type d'instanciate):
La seule réponse correcte, non évitée. Je ferais mieux de résoudre ce problème :)
J'ai mal compris ce que tout le monde dit ici ou au moins je ne me suis pas rendu clair. Je veux obtenir la classe comme je l'utiliserais normalement. Par exemple, je dois passer la classe comme celle-ci: Méthode de vide public
Utilisez la classe "Activation":
Activator.CreateInstance<T>
Voici quelques options énumérées dans l'ordre de ma préférence. Je suppose que t code> est le paramètre de type dans votre classe générique ou votre méthode.
AppDomain.CurrentDomain.CreateInstanceAndUnwrap(typeof(T).Assembly.FullName, typeof(T).FullName);
Je vais baser ma réponse sur la clarification que vous avez fournie dans un commentaire: P>
J'ai mal compris ce que tout le monde dit ici ou au moins je ne me suis pas rendu clair. Je veux obtenir la classe comme je l'utiliserais normalement. Par exemple, je dois transmettre la classe comme celle-ci:
Noid public MethodName
() code> où t code> est la classe. P> blockQuote>
réponse courte forte>: non, vous ne pouvez pas, car les types génériques sont résolus au moment de la compilation. P>
réponse longue forte>: oui, vous pouvez, mais vous devez utiliser la réflexion. Voici comment vous faites cela: P>
- Stackoverflow: Comment utiliser la réflexion pour appeler la méthode générique? A> li>
- 3 commentaires
Bien que cela ne fasse pas ce que je voulais à l'origine, c'était très utile, alors décidé de le marquer comme une réponse. Merci heinzi!
@Fabio: merci. Je dois admettre que je ne comprends pas complètement le dernier édition que vous avez fourni à votre question. Cela pourrait être logique de démarrer une question supplémentaire à ce sujet (c'est-à-dire sur la manière de faire la chose du référentiel). Si votre conception de la bibliothèque nécessite que vous utilisiez la réflexion, il pourrait être possible d'améliorer la conception afin de supprimer le besoin de réflexion.
Je devais utiliser la réflexion afin que notre méthode de mise à jour de notre travailleur fonctionnerait pour tout ce dont nous avons besoin à l'avenir. Le référentiel lui-même est un autre sujet lui-même. Je ne l'ai pas créé et je ne le changerai pas. Merci encore pour votre disponibilité.
Je dois manquer quelque chose. Les réponses fournies jusqu'à présent ne semblent pas correspondre aux questions. J'aimerais plus de clarté.
Je vais néanmoins je vais essayer de répondre à la question comme je le vois. P>
Vous dites que vous essayez de le faire: P>
public class GenericRepository<T> where T : BaseEntity, new() { ... }
Je voulais convertir Convertir un type de variable en classe elle-même. Cela n'a rien à voir avec la partie "nouvelle azurbrightdata ()" ... mais tu avais raison quand tu as dit que personne n'a répondu à la question :) J'ai résolu le problème d'une autre manière. Merci!
L'entêche de typeof (jeton) est le jeton. Le jeton est le littéral qui identifie une classe. Compte tenu d'une instance de l'objet de type, l'inverse est le littéral qui est l'identifiant de la classe. Je pense que c'est ce qu'il veut. Où pouvez-vous utiliser cela? Le littéral est ce dont vous avez besoin pour une distribution ou à droite de "comme".
Je ne comprends pas parfaitement la question de la puissance, mais je pense que cela aidera certainement certaines personnes à rechercher J'ai une liste de dynamiques Composants dans une table de recherche. p> donc je veux prendre Recherche le composant de la table: p> si nous effectivement eu mais nous avons donc ce que nous pouvons faire est de recevoir le "type prototype" de quelque chose qui est `typeof votre classname. p> ou en d'autres termes, ce que nous faisons réellement est: p> Pour moi, cela satisfait ma recherche d'inverse de typeof '. p> Notez également que inverse du typeof code> ce que je suis arrivé ici moi-même.
'image' code> (la touche dans la table) et finissez par
Image code> qui est une propriété de
Imagecomponent code>. P>
imagecomponent code> puis nous pourrions faire une recherche de type sur elle. p>
typeof imagecomponent code>. inutile pour trouver des propriétés sur la classe. p>
la réponse effective ... h3>
' image ' code> et
'vidéo' code> sont Types littéraux et non cordes (sauf au moment de l'exécution quand ils ne sont que des chaînes). p> p>
Que veux-tu faire avec la classe? Instancier un objet? Appelez une méthode statique?
Pourriez-vous être plus précis? Un type est la définition du type, une classe (type de référence) ou une structure (type de valeur). Une instance de type est généralement extraite de typeof (t) ou obj.getType ().
ajouter "opposé de typeof (type)" à des fins de recherche.
"Converse du typeof" pour la recherche de recherche.
Si vous voulez aider les chercheurs à l'avenir, alors vous voulez dire que vous voulez dire «un fonctionnement inverse de typeof»? Merci pour votre contribution. Il est toujours bon d'aider les autres à trouver les réponses à leurs besoins.