I have previously created methods that take a property as input using the following syntax:
public void MyMethod<T>(Expression<Func<T>> property) { }
public int MyProperty { get; set; }
public void SomeOtherMethod() {
MyMethod(() => MyProperty);
}
That way I can, for example, cast the property to a MemberExpression
and get the fully qualified name of the property.
However, is it possible to do the same in a class constructor, or have a property that stores another property, like how the property
variable does in MyMethod()
?
I have tried the following, but that didn't work because the type parameter is not specified in either cases, but I wouldn't even know which type to use... especially because the type is magically inferred in the topmost example.
In constructor
public class MyClass<T> {
public MyClass(Expression<Func<T>> property) { }
}
public int MyProperty { get; set; }
var myClass = new MyClass(() => MyProperty);
As property
public class MyClass<T> {
public Expression<Func<T>> SomeProperty { get; set; }
}
public int MyProperty { get; set; }
var myClass = new MyClass() { SomeProperty = () => MyProperty };
So, how can I have a property expression in a constructor or property of its own without having the use the type definition?