AMcoder - javascript, python, java, html, php, sql

C# արտացոլմամբ մեթոդների օգտագործում [կրկնօրինակ]

ես փորձում եմ կատարել մի բառարան, որն արտացոլում է Dictionary<string, Func<string[], string>>ը: Այս պահին ես ստացել եմ, որ այն աշխատում է այսպես

        lCommands.Add(new string[] { "help", "ayuda" }, HelpFunc);
        lCommands.Add(new string[] { "cambiacargo", "ccl" }, CambiarCargoLegislador);
        lCommands.Add(new string[] { "buscar" }, ObtenerDatosLegislador);
        lCommands.Add(new string[] { "listartiemposbloques" }, ObtenerTiemposBloques);
        lCommands.Add(new string[] { "modificartiemposbloques" }, ModificarTiempoBloque);
        lCommands.Add(new string[] { "logout" }, logout);
        lCommands.Add(new string[] { "tienepalabra", "hablado" }, TiempoPalabraActivo);

որտեղ .Add-ը ընդլայնման մեթոդ է, որը վերցնում է տողերի զանգված և Func և դարձնում այն ​​նույն Func-ի ստեղները: Իմ խնդիրն իրականում կայանում է նրանում, որ ես կցանկանայի, որ դա կարողանայի մտորումների միջոցով: Այսպիսով, որոշ ժամանակ փնտրելուց հետո ես կարողացա գալ սա

   foreach (MethodInfo methodInfo in typeof(CommandHelper).GetMethods(BindingFlags.NonPublic | BindingFlags.Static))
    {
        string methodName = methodInfo.Name;

        object[] attribute = methodInfo.GetCustomAttributes(typeof(Command), true);

        if (attribute.Length > 0)
        {
            Command myAliases = (Command)attribute[0];

            lCommands.Add(myAliases.alias, /* here is my problem propertyInfo.Name*/);
        }
    }

բայց ես վստահ չեմ, թե ինչպես փոխակերպել մեթոդԻնֆո-ն Func<string[],string>ի: Ամփոփելու համար ես ուզում եմ նույնն անել կոդի առաջին մասի համար՝ արտացոլմամբ

Եթե ​​ինչ-որ մեկին դա անհրաժեշտ լինի, սա գործառույթներից մեկի օրինակ է

    [Help(Remainder = "Obtiene el tiempo hablado por un legislador")]
    [Command("tienepalabra,hablado,tpa")]
    private static string TiempoPalabraActivo(string[] arg)
    {
        LegisladorService leServ = new LegisladorService();
        try
        {
            return $"el legislador {leServ.TraerPorIdNombreApellido(Form1._server.tienePalabra)} estuvo hablando durante {Form1._server.TiempoPalabra()}";
        }
        catch (Exception)
        {
            return "No hay legislador con palabra activo";
        }
    }

Նախապես շնորհակալություն

22.01.2019

Պատասխանները:


1

Մեթոդը գործարկելու համար կարող եք զանգահարել .Invokeին մեթոդի տեղեկատվության վրա:

Սա կարող է փաթաթվել Func-ի մեջ.

Func<string[],string> func = (parameters) => methodInfo.Invoke(null, new object[] { parameters });
22.01.2019
  • սա չի աշխատում, ես մոռացել էի նշել, որ սա ստատիկ է, բայց նույնիսկ methodInfo.invoke (null, պարամետրեր) դեպքում այն ​​դեռ ասում է, որ ես չեմ կարող օգտագործել lambda ֆունկցիան անուղղակի տիպի հետ: 22.01.2019
  • Ներողություն. Մոռացել եք, որ lambda-ները չեն կարող վերագրվել var-ին: 22.01.2019
  • Այո, ես մտածեցի դա անել, բայց բառարանը դատարկ է մնում, երբ ես զանգում եմ ստեղներից մեկը, դա ոչինչ չի անում :/: Չնայած ես չունեմ obj, քանի որ այն ստատիկ մեթոդ է 22.01.2019
  • null-ը որպես ստատիկ դասի առաջին պարամետր օգտագործելը ճիշտ է: 22.01.2019
  • այո, հիմա այն աշխատում է, թեև ես հարվածեցի պատին, երբ պարամետրերը զրոյական են, ցանկացած գաղափար ես ստացել եմ այս կոդը Func‹string[], string› func = (պարամետրեր) =› {փորձել { return (string)methodInfo.Invoke(null, parameters) ; } catch (ArgumentException) { return (string)methodInfo.Invoke(null, null); } }; 22.01.2019
  • Invoke պարամետրերը կանչելիս միշտ պետք է լինի զանգված: Այսպիսով, իրականում ձեզ անհրաժեշտ է զանգված զանգվածում: Ես թարմացրել եմ պատասխանը 22.01.2019
  • Նոր նյութեր

    Օգտագործելով Fetch Vs Axios.Js-ը՝ HTTP հարցումներ կատարելու համար
    JavaScript-ը կարող է ցանցային հարցումներ ուղարկել սերվեր և բեռնել նոր տեղեկատվություն, երբ դա անհրաժեշտ լինի: Օրինակ, մենք կարող ենք օգտագործել ցանցային հարցումը պատվեր ներկայացնելու,..

    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար
    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար Ինչպե՞ս հանգստացնել ձեր միտքը և աշխատեցնել ձեր պրոցեսորը: Ինչպես մնալ հանգիստ և զարգանալ ճնշման տակ...

    Մեքենայի ուսուցում բանկային և ֆինանսների ոլորտում
    Բարդ, խելացի անվտանգության համակարգերը և հաճախորդների սպասարկման պարզեցված ծառայությունները բիզնեսի հաջողության բանալին են: Ֆինանսական հաստատությունները, մասնավորապես, պետք է առաջ մնան կորի..

    Ես AI-ին հարցրի կյանքի իմաստը, այն ինչ ասում էր, ցնցող էր:
    Այն պահից ի վեր, երբ ես իմացա Արհեստական ​​ինտելեկտի մասին, ես հիացած էի այն բանով, թե ինչպես է այն կարողանում հասկանալ մարդկային նորմալ տեքստը, և այն կարող է առաջացնել իր սեփական արձագանքը դրա..

    Ինչպես սովորել կոդավորումը Python-ում վագրի պես:
    Սովորելու համար ծրագրավորման նոր լեզու ընտրելը բարդ է: Անկախ նրանից, թե դուք սկսնակ եք, թե առաջադեմ, դա օգնում է իմանալ, թե ինչ թեմաներ պետք է սովորել: Ծրագրավորման լեզվի հիմունքները, դրա..

    C++-ի օրական բիթ(ե) | Ամենաերկար պալինդրոմային ենթաշարը
    C++ #198-ի ամենօրյա բիթ(ե), Ընդհանուր հարցազրույցի խնդիր. Ամենաերկար պալինդրոմային ենթատող: Այսօր մենք կանդրադառնանք հարցազրույցի ընդհանուր խնդրին. Ամենաերկար palindromic substring...

    Kydavra ICAReducer՝ ձեր տվյալների ծավալայինությունը նվազեցնելու համար
    Ի՞նչ է ICAReducer-ը: ICAReducer-ն աշխատում է հետևյալ կերպ. այն նվազեցնում է նրանց միջև բարձր փոխկապակցված հատկանիշները մինչև մեկ սյունակ: Բավականին նման է PCAreducer-ին, չնայած այն..