最初に、私が達成しようとしていることを説明します。
ロギング目的でプロパティ名とその値を取得するメソッドを作成したいので、次のようにします。
public void Log<TPropertySource, TProperty>(Expression<Func<TPropertySource, object>> property, TProperty initialValue, TProperty changedValue){...}
ここで、プロパティのタイプを指定する必要があります。これは .. meh です。理論的には式からそれを引き出すことができるからです。ただし、式は、プロパティが持つことができるすべての可能な型に対応するオブジェクトを返す必要があります。
私は、BCL で最もよく使用される値型のオーバーロードと、それ以外のオブジェクトのオーバーロードを考えています。
public void Log<TPropertySource>(Expression<Func<TPropertySource, string>> property, string initialValue, string changedValue){...}
public void Log<TPropertySource>(Expression<Func<TPropertySource, int>> property, int initialValue, int changedValue){...}
しかし、それも理想的ではありません。
だから基本的に、それを行うためのより良い(怠惰な)方法があるのだろうか?
もう 1 つの質問: Log<TPropertySource>(Expression<Func<TPropertySource, int>> property, int initialValue, int changedValue) でインテリセンスが得られないのはなぜ ですか? logger.Log <A>(x => x.Age, 1, 2); と入力すると、- 正常にコンパイルされますが、インテリセンスは起動しません。