0

次のコードがあります。

 public string GetResponse()
    {
        string fileName = this.Page.Request.PathInfo;
        fileName = fileName.Remove(0, fileName.LastIndexOf("/") + 1);

        switch (fileName)
        {
            case "GetEmployees":
                return GetEmployees();
            default:
                return "";
        }
    }

    public string GetEmployees()
    {

私はこれらの多くを持っています。それらはすべて文字列を返し、switch ケースを回避する方法があるかどうかを知りたがります。ある場合、メソッドが存在しない場合に「Not Found」を返す方法はありますか?

ありがとう

4

1 に答える 1

1

リフレクションを使用してメソッドを取得します。

public string GetResponse()
{
    string fileName = this.Page.Request.PathInfo;
    fileName = fileName.Remove(0, fileName.LastIndexOf("/") + 1);

    MethodInfo method = this.GetType().GetMethod(fileName);
    if (method == null)
        throw new InvalidOperationException(
            string.Format("Unknown method {0}.", fileName));
    return (string) method.Invoke(this, new object[0]);
}

これは、呼び出しているメソッドの引数が常に 0 であることを前提としています。さまざまな数の引数がある場合は、それに応じて MethodInfo.Invoke() に渡されるパラメーターの配列を調整する必要があります。

GetMethod にはいくつかのオーバーロードがあります。このサンプルの 1 つは、パブリック メソッドのみを返します。プライベート メソッドを取得する場合は、BindingFlags パラメーターを受け入れる GetMethod へのオーバーロードの 1 つを呼び出し、BindingFlags.Private を渡す必要があります。

于 2013-02-28T18:29:42.830 に答える