Cast/Convertir IEnumerable<T> IEnumerable<U>?
La suite est conforme, mais au moment de l'exécution déclenche une exception. Ce que je suis en train de faire est de jeter une classe PersonWithAge à une catégorie de Personne. Comment dois-je faire et qu'est-ce que le travail?
class Person
{
public int Id { get; set; }
public string Name { get; set; }
}
class PersonWithAge
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
class Program
{
static void Main(string[] args)
{
IEnumerable<PersonWithAge> pwa = new List<PersonWithAge>
{
new PersonWithAge {Id = 1, Name = "name1", Age = 23},
new PersonWithAge {Id = 2, Name = "name2", Age = 32}
};
IEnumerable<Person> p = pwa.Cast<Person>();
foreach (var i in p)
{
Console.WriteLine(i.Name);
}
}
}
EDIT: Par la voie PersonWithAge contiendra toujours les mêmes propriétés que Personne, plus un couple de plus.
EDIT 2 Désolé les gars mais j'aurais fait un peu plus clair, disons que j'ai deux db vues dans une base de données qui contient les mêmes colonnes, mais la vue 2 contient 1 champ supplémentaire. Mon modèle afficher les entités sont générés par un outil qui imite les vues de base de données. J'ai un MVC vue partielle qui hérite de la classe d'entités, mais j'ai plus d'une façon de s'emparer des données...
Ne sais pas si cela aide, mais cela signifie que je ne peux pas faire personWithAge hériter de personne.
OriginalL'auteur Rippo | 2009-11-21
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas jeter parce qu'ils sont de types différents. Vous avez deux choix:
1) Changement de la classe de sorte que PersonWithAge hérite de personne.
2) Créer de nouveaux objets:
OriginalL'auteur Mark Byers
Utilisation Sélectionnez au lieu de Moulé afin d'indiquer comment effectuer la conversion d'un type à l'autre:
Aussi comme
PersonWithAge
contiendra toujours les mêmes propriétés quePerson
plus d'un couple de plus il serait préférable d'hériter dePerson
.OriginalL'auteur Darin Dimitrov
Vous ne pouvez pas les jeter deux indépendants type les uns dans les autres. Vous pourriez faire il possible de convertir PersonWithAge à Personne en laissant PersonWithAge hériter de la Personne. Depuis PersonWithAge est évidemment un cas particulier d'une Personne, ce qui rend beaucoup de sens:
Maintenant, si vous avez un
IEnumerable<PersonWithAge>
nommépersonsWithAge
, puispersonsWithAge.Cast<Person>()
fonctionne.Dans VS 2010, vous pourrez même être en mesure de sauter le casting tout à fait et ne
(IEnumerable<Person>)personsWithAge
, depuisIEnumerable<T>
est covariant .NET 4.OriginalL'auteur Joren
Faire PersonWithAge hériter de Personne.
Comme ceci:
OriginalL'auteur Michał Drozdowicz
vous pouvez modifier votre code pour être quelque chose comme:
OriginalL'auteur John Boker
Vous pouvez garder le
IEnumerable<PersonWithAge>
et de ne pas le convertir enIEnumerable<Person>
. Ajoutez simplement une conversion implicite de convertir un objet dePersonWithAge
àPerson
quand vous en avez besoin.OriginalL'auteur Mehdi Golchin