Получить общий тип аргумента и значение, предоставленное универсальному методу

Как вы получаете значение аргумента, предоставленное закрытому / построенному универсальному методу?

Это'с тех пор как яОтражение Отражение Все это было позади меня, ну, что угодно.

class Program
{
    static void Main(string[] args)
    {
        new ConcreteFoo().GenericMethod(5);
        Console.ReadKey();
    }
}

class ConcreteFoo
{
    public void GenericMethod(Q q) 
    {
        var method = MethodInfo.GetCurrentMethod();    
        var parameters = method.GetParameters();    
        if (parameters.Length > 0)
            foreach (var p in parameters)
                Console.WriteLine("Type: {0}", p.ParameterType);

        // That still prints Q as the type. 
        // I've tried GetGenericArguments as well. No luck.                
        // I want to know:
        // 1) The closed type, i.e. the actual generic argument supplied by the caller; and
        // 2) The value of that argument
    }

    public void GenericMethodWithNoGenericParameters() 
    { 
        // Same here
    }
}

class GenericFoo
{
    public void NonGenericMethod(T t) { /* And here*/ }  
    public void GenericMethod(Q q) { /* And here */ }
}

ОБНОВИТЬ

Этот вопрос абсурден и, следовательно, закрыт спрашивающим. Он хочет сохранить это, просто чтобы показать своим детям, насколько глупыми были папы, если они когда-нибудь оказались программистами на C #.

Ответы на вопрос(1)

Ваш ответ на вопрос