2009-09-21 11 views
14

Sprawdzam parametry metody C# za pomocą odbicia. Metoda ma pewne parametry wyjściowe i dla nich otrzymuję typy zwrotne, które mają wartość IsByRef = true. Na przykład, jeśli parametr jest zadeklarowany jako "out string xxx", parametr ma typ System.String &. Czy istnieje sposób przekonwertowania System.String & z powrotem do System.String? Rozwiązanie powinno oczywiście nie tylko działać dla System.String, ale dla dowolnego typu.Konwertuj typ C# by-reference na zgodny nieindencyjny typ

+2

Mogę zmienić tytuł z "odniesienia" do "by-reference"? –

+0

Nie, nie ma problemu dla mnie. – Achim

Odpowiedz

24

Użyj Type.GetElementType().

Demo:

using System; 
using System.Reflection; 

class Test 
{ 
    public void Foo(ref string x) 
    { 
    } 

    static void Main() 
    { 
     MethodInfo method = typeof(Test).GetMethod("Foo"); 
     Type stringByRef = method.GetParameters()[0].ParameterType; 
     Console.WriteLine(stringByRef); 
     Type normalString = stringByRef.GetElementType(); 
     Console.WriteLine(normalString);   
    } 
}