0

関数パラメーターとして可能な型を渡すことができるようにしたいと思います。

現在、プロパティの受け渡しに問題があります。

class Foo
{
    public int Bar { get; set; }
}

nameof(Foo.Bar) を使用できますが、A で nameof が使用される A(Foo.Bar) を実行できません。

文字列がプロパティから作成されていることを確認したいのですが、プロパティを API に渡し、API 内で nameof を実行したいと考えています。

関数を介して nameof にプロパティを渡す可能性はありますか? 準備が整った文字列を取得する代わりに、クラス内でプロパティから文字列への変換を非表示にしたいと考えています。それをどのように達成しますか?

編集:手がかりは次のとおりです:

class B
{
    public Prop {get; set;}
}

void foo([?])
{
    Console.WriteLine(nameof([?]));
}

代わりに [?] を入れて、コンソール出力を次のようにします。

4

2 に答える 2

1

nameofここで少し間違った解釈をしていると思います。

最初の例では、メソッドは常にT出力され、のタイプに依存しませんT。キーワードは、nameof指定された式をその式の文字列表現に置き換える以外には何もしません。たとえばnameof、パラメータTを指定すると、その式の文字列表現が返されます: T.

void A<T>(T smth)
{
   Console.Writeline(nameof(T)); // example usage
}

一般に、 の使用法nameofは、リファクタリング可能なメソッド/プロパティ/... の名前をメソッドに提供することです。

たとえば、は範囲外のArgumentOutOfRangeException引数の名前をパラメーターとして持っています。

void Test(int value)
{
    if (value < 0) throw new ArgumentOutOfRangeException("value");
    // yada yada
}

上記の例のようにハードコードされた文字列として名前を指定すると、パラメーターの名前を変更するときに矛盾が発生します。

これを解決するために使用nameofします。ハードコードされた文字列の代わりにパラメーター自体を提供しているため、リファクタリング セーフです。

void Test(int value)
{
    if (value < 0) throw new ArgumentOutOfRangeException(nameof(value));
    // yada yada
}
于 2016-08-03T17:16:05.997 に答える