2

リストに保存されているメソッド名でメソッドを呼び出したい。誰か助けてもらえますか?私はc#を初めて使用します!

{
   delegate string ConvertsIntToString(int i);
}

class Program
{
    public static List<String> states = new List<string>() { "dfd","HiThere"};
    static void Main(string[] args)
    {
        ConvertsIntToString someMethod = new ConvertsIntToString(states[1]);
        string message = someMethod(5);
        Console.WriteLine(message);
        Console.ReadKey();
    }
    private static string HiThere(int i)
    {
        return "Hi there! #" + (i * 100);
    }
 }
4

1 に答える 1

3

まったく必要ないようです-動的に呼び出そDelegate.DynamicInvokeうとはしていません-デリゲートを動的に作成しようとしています。これはで実行できます。あなたの例に基づいた短いが完全なプログラム(ただし、リストは使用しません-ここではその必要はありません):Delegate.CreateDelegate

using System;
using System.Reflection;

delegate string ConvertsIntToString(int i);

class Program
{
    static void Main(string[] args)
    {
        // Obviously this can come from elsewhere
        string name = "HiThere";

        var method = typeof(Program).GetMethod(name, 
                                               BindingFlags.Static | 
                                               BindingFlags.NonPublic);
        var del = (ConvertsIntToString) Delegate.CreateDelegate
            (typeof(ConvertsIntToString), method);

        string result = del(5);
        Console.WriteLine(result);
    }

    private static string HiThere(int i)
    {
        return "Hi there! #" + (i * 100);
    }
 }

必要なメソッドが別のタイプであるか、インスタンスメソッドであるか、パブリックである場合は、明らかに調整する必要があります。

于 2012-06-29T22:53:21.950 に答える