Convertir le Type de Définition de Classe Générique
Je voudrais convertir un System.Type
Générique de la définition de Type, donc je peux l'utiliser pour appeler des méthodes Génériques. Fondamentalement, à l'inverse de typeof
.
Exemple (j'ai utilisé "classof" où j'aurais besoin de la vraie solution pour que vous voyez où j'ai eu un problème, comme classof n'est pas un vrai .Méthode NETTE):
public class BaseAppContext {
private Type settingsType;
public Type SettingsType
{
get { return this.settingsType; }
set { this.SettingsType = value; }
}
public void MyFunction() {
MyStaticClass.GetData<classof(this.SettingsType)>();
}
}
Seulement un peu plus d'informations pourquoi je suis à l'aide de cette étrange façon de gérer le problème. BaseAppContext est une classe qui est appelé par beaucoup d'autres classes. Si j'allait le rendre Générique qui signifierait beaucoup d'autres parties du code allait changer, que je ne veux pas. Je suis en train d'écrire un cadre, je voudrais donc, pour le cadre d'entrée du type une fois, et les développeurs peuvent seulement utiliser les fonctions fournies sans avoir à traiter avec le type, à chaque fois, essayez d'appeler une méthode.
List<classof(X)>
? Quelles contraintes?OriginalL'auteur nino | 2012-02-06
Vous devez vous connecter pour publier un commentaire.
C'est fondamentalement impossible.
Les génériques forme au moment de la compilation types; vous ne pouvez pas créer un type de compilation à partir d'un type connu qu'à l'exécution.
Au lieu de cela, vous devez utiliser la réflexion, ou d'utiliser un design différent (par exemple, une non-méthode générique).
OriginalL'auteur SLaks
Ce ne sera pas possible, car
SettingsType
est définie au moment de l'exécution et le code entre<>
est compilé.Vous pouvez créer une instance de votre type comme ceci:
et fonte
inst
à une interface ou une classe de base.Depuis que vous utilisez une classe statique, riche de réponse, c'est mieux.
OriginalL'auteur ken
Pour ce faire, vous aurez besoin d'utiliser la réflexion:
Cependant, je ne recommanderais pas faire cela et serait plutôt de conseiller la refonte de votre solution. L'utilisation de la réflexion signifie que vous manquez tout le beau moment de la compilation de sécurité que la langue fournit. Cela conduit généralement à de plus en plus fragiles, moins facile à gérer le code.
OriginalL'auteur Rich O'Kelly