2010-10-01 20 views
3

Je souhaite déterminer si MyBindingSource.DataSource est affecté au jeu de concepteurs Type ou si une instance d'objet lui a été affectée. Ceci est mon courant (plutôt laid) solution:C# - Détermine à l'exécution si la propriété est une instance Type ou Object?

Type sourceT = MyBindingSource.DataSource.GetType(); 
if(sourceT == null || sourceT.ToString().Equals("System.RuntimeType")) { 
    return null; 
} 
return (ExpectedObjType) result; 

Le System.RuntimeType est privé et non accessible, je ne peux pas le faire:

Type sourceT = MyBindingSource.DataSource.GetType(); 
if (object.ReferenceEquals(sourceT, typeof(System.RuntimeType))) { 
    return null; 
} 
return (ExpectedObjType) result; 

Je me demandais si une meilleure solution existe ? Particulièrement celui qui ne compte pas sur le nom Type.

Répondre

1

Depuis System.RuntimeType est dérivé de System.Type vous devriez être en mesure de faire ce qui suit:

object result = MyBindingSource.DataSource; 
if (typeof(Type).IsAssignableFrom(result.GetType())) 
{ 
    return null; 
} 
return (ExpectedObjType)result; 

ou encore de façon plus concise:

object result = MyBindingSource.DataSource; 
if (result is Type) 
{ 
    return null; 
} 
return (ExpectedObjType)result; 

Coïncidence Telle est l'approche adoptée here.

+0

Exactement ce que je cherchais, merci! – Rob

1

Vous n'êtes pas obligé de ToString(); vous devriez être en mesure d'accéder à son nom via GetType() (qui est à peu près la même chose). De toute façon, parce que c'est une classe privée et non accessible à partir du code développeur, je pense que vous êtes coincé avec une "chaîne magique" si vous avez besoin de vérifier qu'il s'agit spécifiquement d'un RuntimeType. Toutes les «meilleures solutions» ne sont pas aussi élégantes que nous le souhaiterions.

Si tous les paramètres Type que vous obtiendriez sont des objets RuntimeType, vous pouvez rechercher la classe de base comme cela a été suggéré dans une autre réponse. Cependant, si vous pouvez recevoir un type qui n'est pas un RuntimeType, vous obtiendrez des "faux positifs".