Почему этот пример MSDN на Reflection не работает? - PullRequest
1 голос
/ 23 декабря 2009

Я скопировал и вставил этот пример, и, похоже, он не работает. Почему MethodBase нулевой?

http://msdn.microsoft.com/en-us/library/system.reflection.parameterinfo.isout.aspx

редактирование: вот ссылка на мой код: http://img689.imageshack.us/img689/3453/94123952.png

Дайте мне знать, где моя копия и вставка неверны.

вот код для тех, кто не может просмотреть изображение:

#region

using System;
using System.Reflection;

#endregion

namespace ConsoleApp
{
class parminfo
{
    public static void mymethod(
       int int1m, out string str2m, ref string str3m)
    {
        str2m = "in mymethod";
    }

    public static int Main(string[] args)
    {
        Console.WriteLine("\nReflection.Parameterinfo");

        //Get the ParameterInfo parameter of a function.

        //Get the type.
        Type Mytype = Type.GetType("parminfo");

        //Get and display the method.
        MethodBase Mymethodbase = Mytype.GetMethod("mymethod");
        Console.Write("\nMymethodbase = " + Mymethodbase);

        //Get the ParameterInfo array.
        ParameterInfo[] Myarray = Mymethodbase.GetParameters();

        //Get and display the IsOut of each parameter.
        foreach (ParameterInfo Myparam in Myarray)
        {
            Console.Write("\nFor parameter # " + Myparam.Position
               + ", the IsOut is - " + Myparam.IsOut);
        }
        return 0;
    }
}

}

Ответы [ 2 ]

3 голосов
/ 23 декабря 2009

Ваша проблема в следующем коде:

Type.GetType("parminfo")

Это попытается найти тип с полностью определенным именем parminfo, но такого не существует. Ваш класс объявлен в пространстве имен, и поэтому его полное имя - ConsoleApp.parminfo.

Еще лучше, просто используйте typeof(parminfo).

2 голосов
/ 23 декабря 2009

Я скопировал и вставил связанный код и получил следующий вывод:

Reflection.Parameterinfo

Mymethodbase = Void mymethod(Int32, System.String ByRef, System.String ByRef)
For parameter # 0, the IsOut is - False
For parameter # 1, the IsOut is - True
For parameter # 2, the IsOut is - FalsePress any key to continue . . .

Вы четко скопировали и вставили код и внесли некоторые изменения, которые сделали код неверным. Скопируйте и вставьте снова, но не вносите изменений и выполните код. Дайте нам знать, если это удастся. Затем, если вы пытаетесь внести изменения и получаете ошибки, сообщите нам, что вы сделали, и мы поможем диагностировать проблему.

Примечание: я предполагаю, что вы имели в виду код C #, так как вы пометили этот C #. Я не тестировал код VB.NET.

В сторону: Почему Microsoft не может следовать собственным соглашениям об именах в своем примере кода?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...