web-dev-qa-db-ja.com

nameof演算子が(同じメソッドの外部で)メソッドパラメーターにアクセスする方法はありますか?

次のクラスとメソッドを使用します。

_public class Foo
    public Foo Create(string bar) {
        return new Foo(bar);
    }
_

したがって、「作成」を取得することは明らかです:nameof(Foo.Create)

リフレクションを使用して実行時にパラメーターを読み取る以外に、「バー」を取得する方法はありますか?

26
Chris Marisic

いいえ。nameofを使用してメソッドの外部からパラメータ名を取得する方法はありません。呼び出し側で名前が必要な場合、nameofはメソッドパラメーターでは機能しません(呼び出し先では明らかに機能します)。リフレクションのようなあなたが言及した他の方法はうまくいきます。

var parameterNames = typeof(Program)
                     .GetMethod(nameof(Program.Main)).GetParameters()
                     .Select(p => p.Name);
21
Patrick Hofman

私はこれが遅い返事であることを知っています、しかし私は反省を必要としない問題へのかなり単純で適度にエレガントな解決策を見つけました。

このようにクラスFooを変更します...

public class Foo
  public static string CreateName = nameof(Create);
  public Foo Create(string bar) {
    return new Foo(bar);
  }
}

...その後、他のクラスで行うことができます...

Foo.CreateName

...メソッドの名前が表示されます。

0
Avrohom Yisroel