Accessing Local Variable Information

Accessing Local Variable Information


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


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 =
	        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=, Culture=neutral, Public
	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.


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 Figure.

LocalVariableInfo information




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


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


Returns a Type object that describes the type of this variable


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.

 Python   SQL   Java   php   Perl 
 game development   web development   internet   *nix   graphics   hardware 
 telecommunications   C++ 
 Flash   Active Directory   Windows