Reflection C#

using System;
using System.Reflection;
[AttributeUsage(AttributeTargets.Parameter)]
public class MyAttribute : Attribute
{
    private string myName;
    public MyAttribute(string name)
    {
        myName = name;
    }
    public string Name 
    {
        get 
        {
            return myName;
        }
    }
}
[AttributeUsage(AttributeTargets.Parameter)]
public class MyDerivedAttribute : MyAttribute
{
    public MyDerivedAttribute(string name) : base(name) {}
}
public class MyClass1
{
    public void MyMethod(
        [MyAttribute("This is an example parameter attribute")]
        int i,
        [MyDerivedAttribute("This is another parameter attribute")]
        int j,
        int k )
    {
        return;
    }
}
public class MemberInfo_GetCustomAttributes 
{
    public static void Main()
    {
        Type myType = typeof(MyClass1);
        MethodInfo[] myMethods = myType.GetMethods();
        foreach (MethodInfo mi in myMethods)
        {
            ParameterInfo[] myParameters = mi.GetParameters();
            if (myParameters.Length > 0)
            {
                Console.WriteLine(mi);
                foreach (ParameterInfo pi in myParameters)
                {
                    if (pi.IsDefined(typeof(MyAttribute), false))
                    {
                        Console.WriteLine(pi.Position);
                        Console.WriteLine(pi.Name);
                        Console.WriteLine(pi.ParameterType);
                    }
                }
            }
        }  
    }
}