Google


   


You are here: CodeIdol.com > C# > C# Cookbook, 2nd Edition > Reflection > Accessing Local Variable Information

SAVE
Digg
Shown on del.icio.us del.icio.us
See Whos Talking About This on Technorati Technorati
I've Reddit reddit

Recipe 13.15. Accessing Local Variable Information

Problem

You are building a tool that examines code and you need to get access to the local variables within a method.

Solution

Use the LocalVariables property on the MethodBody class to return an IList of LocalVariableInfo objects, each of which describes a local variable within the method:

	public static IList<LocalVariableInfo> GetLocalVars(string asmPath,
	                                    string typeName, string methodName)
	{
	    Assembly asm = Assembly.LoadFrom(asmPath);
	    Type asmType = asm.GetType(typeName);
	    MethodInfo mi = asmType.GetMethod(methodName);
	    MethodBody mb = mi.GetMethodBody();

	    IList<LocalVariableInfo> vars = mb.LocalVariables;

	    // Display information about each local variable.
	    foreach (LocalVariableInfo lvi in vars)
	    {
	        Console.WriteLine("IsPinned: " + lvi.IsPinned);
	        Console.WriteLine("LocalIndex: " + lvi.LocalIndex);
	        Console.WriteLine("LocalType.Module: " + lvi.LocalType.Module);
	        Console.WriteLine("LocalType.FullName: " + lvi.LocalType.FullName);
	        Console.WriteLine("ToString(): " + lvi.ToString());
	    }

	    return (vars);
	}

The GetLocalVars method can be called using the following code:

	public static void TestGetLocalVars()
	{
	    Process current = Process.GetCurrentProcess();

	    // Get the path of the current module.
	    string path = current.MainModule.FileName;

	    // Get all local var info for the CSharpRecipes.Reflection.GetLocalVars method.
	    System.Collections.ObjectModel.ReadOnlyCollection<LocalVariableInfo> vars =
	        (System.Collections.ObjectModel.ReadOnlyCollection<LocalVariableInfo>)
	        GetLocalVars(path, "CSharpRecipes.Reflection", "GetLocalVars");
	}

The output of this method is shown here:

	IsPinned: False
	LocalIndex: 0
	LocalType.Module: CommonLanguageRuntimeLibrary
	LocalType.FullName: System.Reflection.Assembly
	ToString( ): System.Reflection.Assembly (0)
	IsPinned: False
	LocalIndex: 1
	LocalType.Module: CommonLanguageRuntimeLibrary
	LocalType.FullName: System.Type
	ToString( ): System.Type (1)
	IsPinned: False
	LocalIndex: 2
	LocalType.Module: CommonLanguageRuntimeLibrary
	LocalType.FullName: System.Reflection.MethodInfo
	ToString( ): System.Reflection.MethodInfo (2)
	IsPinned: False
	LocalIndex: 3
	LocalType.Module: CommonLanguageRuntimeLibrary
	LocalType.FullName: System.Reflection.MethodBody
	ToString( ): System.Reflection.MethodBody (3)
	IsPinned: False
	LocalIndex: 4
	LocalType.Module: CommonLanguageRuntimeLibrary
	LocalType.FullName: System.Collections.ObjectModel.ReadOnlyCollection`1[[System.
	Reflection.LocalVariableInfo, mscorlib, Version=2.0.0.0, Culture=neutral, Public
	KeyToken=b77a5c561934e089]]
	ToString( ): System.Collections.ObjectModel.ReadOnlyCollection`1[System.Reflectio
	n.LocalVariableInfo] (4)

The LocalVariableInfo objects for each local variable found in the CSharpRecipes. Reflection.GetLocalVars method will be returned in the vars IList collection.

Discussion

The LocalVariables property can give you a good amount of information about variables within a method. The LocalVariables property returns an IList<LocalVariableInfo> collection. Each LocalVariableInfo object contains the information described in Table 13-5.

Table 13-5. LocalVariableInfo information

Member

Definition

IsPinned

Returns a bool indicating if the object that this variable refers to is pinned in memory (TRue) or not (false)

LocalIndex

Returns the index of this variable within this method's body

LocalType

Returns a Type object that describes the type of this variable

ToString

Returns the LocalType.FullName, a space, and then the LocalIndex value surrounded by parentheses


See Also

See the "MethodInfo Class," "MethodBody Class," "ReadOnlyCollection<T> Class," and "LocalVariableInfo Class" topics in the MSDN documentation.


SAVE
Digg
Shown on del.icio.us del.icio.us
See Whos Talking About This on Technorati Technorati
I've Reddit reddit

You are here: CodeIdol.com > C# > C# Cookbook, 2nd Edition > Reflection > Accessing Local Variable Information


   
Related tags







Popular Categories
Unix books and guides

AJAX popular information
C# language guides
Windows books and cookbooks

.......








    С 2009 года мы стали переводить структура сайта на различные языки. Сайт теперь будет содержать книги не только на английском языке, но также и на других европейских языках, в том числе и на Русском языке.

    Русский Polski Francais Deutsch
    support sitemap terms

© CodeIdol Labs, 2007 - 2009