passer de la classe comme type de paramètre c# et utilisé avec dictionnaire
Je suis de créer une fonction pour retourner un dictionnaire et je veux passer un nom de classe à travers comme un paramètre. Mais sa donne une erreur. Le Code que j'ai écrit est donné ci-dessous
public Dictionary<object, object> GetDetails(Type Classname)
{
MvcDemoDBEntities db = new MvcDemoDBEntities();
Dictionary<Classname, object> dict = new Dictionary<Classname, object>();
var data = (from h in db.People
select h).ToList();
foreach (var item in data)
{
dict.Add(data, true);
}
return dict;
}
ce que je fais mal
et je tiens à appeler cette fonction avec un nom de classe de manière dynamique, comme ceci :
List<people> list = GetDetails(people).Keys.ToList();
des gens à mon nom de classe.
C'est le type de classe, pas de nom de classe. J'ai édité votre question, pour être plus précis
OriginalL'auteur Nayeem Mansoori | 2013-11-22
Vous devez vous connecter pour publier un commentaire.
L'Utilisation De Génériques
De votre approche vous donnera beaucoup de peine. Comme vous allez passer un objet de Type pour votre classe, vous aurez besoin de la réflexion pour être en mesure de créer le
Dictionary
.Comme une alternative, je vous propose de créer une méthode générique:
L'utiliser comme ceci:
À L'Aide De Type
Bien sûr, cela peut être fait en utilisant un Type d'objet, ce prevoit l'utilisation de la réflexion pour être en mesure de créer un objet de type nous ne savons pas (c'est l'objet du dictionnaire). Cela se fait comme suit:
Utiliser comme ceci:
À creuser plus profond de
J'ai remarqué que vous avez cette ligne:
Vous pouvez être intéressé à changer
People
à une propriété correspondant au nom de la classe que vous transmettez. Ce ne peut être archivé par la réflexion. D'une façon similaire à la façon dont nous avons obtenu laAdd
méthode du dictionnaire, nous pouvons obtenir une propriété de l'objetdb
dont le nom est donné par le type d'argument.Je vais le présenter comme une deuxième méthode pour être appelé par le premier.
L'Utilisation De Génériques
À utiliser, remplacer ceci:
:
À L'Aide De Type
Ici, la lutte, c'est que nous ne connaissons pas le type d'élément... donc je vais utiliser IEnumerable.
À utiliser, remplacer ceci:
:
pouvez-vous être plus précis? Aussi, je vais modifier ma réponse à présenter la réflexion, même si cela va me prendre un certain temps.
J'ai utilisé votre fonction comme ceci ------------------------------ public Dictionnaire<object, object> GetDetails<TClass>() { Dictionnaire<TClass, object> dict = new Dictionary<TClass, object>(); foreach (var item in dict) { dict.Ajouter(TClass, true); } return dict; } Mais sa donne une erreur comment faire pour ajouter une classe de valeur dans le dictionnaire
vous devez utiliser les objets comme les clés, pas TClass, TClass est le type. Consultez la mise à jour de réponse. Edit: correction d'une faute.
#Theroat mon problème n'est pas de résoudre de vous donner des réponses
OriginalL'auteur Theraot
Vous devez utiliser
typeof
pour passer le type de votre classeOriginalL'auteur wudzik