6

プロパティ名の抽出にnameofoverを使用することをお勧めします。expressions

//method with expression
protected void RaisePropertyChanged<T>(Expression<Func<T>> propertyExpression, bool isValid, [param: Localizable(true)] string validationError)
{
    string propertyName = PropertySupport.ExtractPropertyName(propertyExpression);
    RaisePropertyChanged(propertyName, isValid, validationError);
}

//the same logic without expression
protected void RaisePropertyChanged(string propertyName, [param: Localizable(true)] string validationError)
{
    RaisePropertyChanged(propertyName, validationError == null, validationError);
}

でも呼び方が違う

public string Url
{
    set
    {
        //with nameof
        RaisePropertyChanged(nameof(Url), this.GetValidationError());
        //with expression
        RaisePropertyChanged(() => Url, this.GetValidationError());
    }
}

それぞれのアプローチについて、どのような長所と短所を知っていますか? それとも実行速度だけが問題ですか?つまり、コンパイル後nameofに値に置き換えられます。const

4

4 に答える 4

12

コンパイル時にできることをするのに、なぜ式を使うのでしょうか? nameof(Url)コンパイル時に決定されます。コストは 0 ミリ秒です。あとで評価する。を使用できる場合、式の作成はコストがかかり、無意味ですnameof

要するに、本当に必要でない限り、式を使用しないでください (既に式の内部で作業しており、そこから移動する必要があります)。それ以外の場合は を使用しますnameof

于 2016-07-12T09:01:17.357 に答える