0

I am getting the following error when I try to pass in x.Bar in the RegisterMethod.

Member 'TestProject2.Foo.Bar.get' cannot be accessed with an instance reference; qualify it with a type name instead

Q. Is it possible at all to keep Bar property static?

namespace TestProject2
{
    [TestClass]
    public class UnitTest1
    {
        [TestMethod]
        public void TestMethod1()
        {

            RegisterMethod<Foo, string>(x => x.Bar); <-- error here

        }

        static void RegisterMethod<TSelf, TProp>(Expression<Func<TSelf, TProp>> expression)
        {
            var member_expression = expression.Body as MemberExpression;
            if (member_expression == null)
                return;

            var member = member_expression.Member;
            if (member.MemberType != MemberTypes.Property)
                return;

            var property = member as PropertyInfo;
            Console.WriteLine(property.Name);
            Console.WriteLine(property.DeclaringType);

        }

    }

    public class Foo
    {
        private string _bar;
        public static string Bar  <-- would very much want to keep this static
        {
            get { return _bar; }
            set { _bar = value; }
        }
    }
}
4

3 に答える 3

1

RegisterMethod呼び出しを次のように書き換えることができます。

RegisterMethod(x => Foo.Bar);

型パラメーターを指定する必要はありません。型パラメーターは、メンバーの推論を使用して推定されます。

ただし、メソッドを拡張して、RegisterMethod常にMemberExpression.

于 2013-01-07T20:32:49.340 に答える
1

タイプがわかっているので、次のようx.Barにに置き換えることができます。Foo.Bar

RegisterMethod<Foo, string>(x => Foo.Bar);

これにより、エラー メッセージが処理されます。そもそもエラーが表示される理由は、インスタンス構文を介して静的メンバーにアクセスするときに、コンパイラに混合メッセージを送信しているためです。一方では、それBarがメンバー プロパティであると考えていることを伝えています。一方、それをstaticプロパティとして宣言しました。このような不整合は、リファクタリングが失敗したときによく発生するため、コンパイラはエラーをトリガーして、コードを再確認するように求めます。

于 2013-01-07T20:31:56.923 に答える
0

太字の質問に答えるには:

Q. Bar プロパティを静的に保つことはできますか??

静的に保つには、Bar静的にする必要があり_barます。そうでなければ意味がありません。

x.BarBarが静的な場合も意味がありません。でアクセスBarしますFoo.Bar

静的プロパティは、クラスの特定のインスタンスには関連付けられていません。その静的pのインスタンスは1つだけです


_bar非静的で静的である必要がある場合Barは、設計に根本的な問題があります。

于 2013-01-07T20:32:38.013 に答える