8
votes

Y a-t-il un type d'opération inverse?

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>

EDIT H2>

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());


5 commentaires

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.


8 Réponses :


1
votes

Utilisez la nouvelle contrainte ().

public T Create<T>() where T : new() {
    return new T();
}


1 commentaires

Ou simplement utiliser l'activateur intégré.createInstance



2
votes

Je pense que vous recherchez Activator.createInstance . < / p>


0 commentaires

7
votes

Si j'ai compris des réponses sous votre question que vous cherchez peut-être quelque chose comme ceci (type d'instanciate): xxx


2 commentaires

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 () où T est la classe. De cette façon, je suis capable de l'utiliser comme mentionné dans la nouvelle édition. Merci quand même. Vous étiez toujours utile et, par conséquent, avancé.



3
votes

Utilisez la classe "Activation":

Activator.CreateInstance<T>


0 commentaires

2
votes

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);


0 commentaires

5
votes

Je vais baser ma réponse sur la clarification que vous avez fournie dans un commentaire:

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 () t est la classe.

réponse courte : non, vous ne pouvez pas, car les types génériques sont résolus au moment de la compilation.

réponse longue : oui, vous pouvez, mais vous devez utiliser la réflexion. Voici comment vous faites cela:


1
votes

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()
{
    ...
}


2 commentaires

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".