2010-10-07 7 views
1

J'ai une classe de base. A et B étendent la base. Il existe également une relation de classe qui contient deux objets de base (source, cible). Est-il possible de déterminer si la source/cible est une instance A ou B?Question relative à l'héritage

Merci.

Christian

PS:

est un peu ici sur ajouter. J'utilise automapper et je voudrais mapper le type de source/cible à une chaîne appelée 'Type' - GetType n'a pas fonctionné (en fait cela fonctionne -si mes commentaires - est et sont aussi de bonnes solutions aussi):

Mapper.CreateMap<Item, ItemViewModel>() 
       .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.ItemName == null ? "" : src.ItemName.Name)) 
       .ForMember(dest => dest.Type, opt => opt.MapFrom(src => src.GetType().ToString())); 

Comment puis-je utiliser is/as dans ce scénario?

+0

Merci J'ai joué avec GetType et cela n'a pas fonctionné. – cs0815

+0

Oups les choses GetType que j'ai écrites fonctionnent réellement - il y avait une erreur au frontend. Acceptera la réponse de Jon Skeet si ... – cs0815

Répondre

8

Eh oui:

if (source is A) 

if (source is B) 

etc

ou:

A sourceA = source as A; 
if (sourceA != null) 
{ 
    ... 
} 

etc

Voir this question pour plus de conseils - et il y a beaucoup d'autres semblables, aussi.

+2

+ 1 vous me battre, avez-vous ces réponses en cache ou quelque chose? :) –

+0

Garr ... vous êtes trop rapide ce matin (enfin, au moins le matin pour moi). –

+0

Argh! Vous êtes trop vite l'homme! – jmservera

4

oui.

if (source is B)...

0

Utilisation de l'opérateur is? :)