2010-07-27 4 views
3

Je regarde les paramètres d'une méthode et en extrayant les types. Je reviens (par exemple) "System.String &", parce que le paramètre est un paramètre out. Je veux savoir si le paramètre est une chaîne - mais il ne semble pas y avoir un moyen de convertir une chaîne & en sa contrepartie non-ref.Y at-il un moyen de convertir entre un type de paramètre Ref et la version non ref en C#

Quelqu'un peut-il me diriger dans la bonne direction?

Merci!

+0

Qu'est-ce qu'un '' String &? – GenericTypeTea

+1

Si vous avez un paramètre 'ref' sur une méthode et inspectez le type de paramètre en utilisant la réflexion, vous obtenez le nom du type avec une esperluette ajoutée indiquant qu'il s'agit d'un paramètre' ref'. –

+0

@Daniel - Merci, je n'ai jamais su cela. – GenericTypeTea

Répondre

9

Type.GetElementType

Le type de l'objet englobé ou visée par le réseau en cours, le pointeur , ou le type de référence, ou une valeur nulle si le type de courant est pas un tableau ou un pointeur , ou n'est pas passé par la référence , ou représente un type générique ou un paramètre de type dans la définition d'un type générique ou méthode générique.

Exemple:

var stringRefType = typeof(string).MakeByRefType(); 
var stringType = stringRefType.GetElementType(); 
Console.WriteLine(stringType == typeof(string)); // True 
+2

Et vous utiliseriez la propriété 'IsByRef' pour déterminer qu'il s'agit d'un type de référence, au lieu de vérifier si le nom du type se termine par un" & ", pour compléter votre réponse. –

+0

Cela me rend si heureux que les réponses à des questions obscures comme celle-ci ont effectivement été répondu ici. Alors gagne! – MarkPflug