C# Pass a property by reference

.net, c#, pass-by-reference, properties

Solution

You can call the function with a lambda expression:

private void setFromQueryString<T>(Action<T> setter, String queryString, HttpContext context) 
{ 
    //here I want to handle pulling the values out of  
    //the query string and parsing them or setting them 
    //to null or empty string... 
    String valueString = context.Request.QueryString[queryString].ToString();  

    //I need to check the type of the property that I am setting. 

    //this is null so I can't check it's type 
    Type t = typeof(T); 
    ...
    setter(value);
} 

You would call it like this:

setFromQueryString<int>(i => myFoo.Age = i, "inputAge", context);

EDIT: If you really want type inference:

private void setFromQueryString<T>(Func<T> getter, Action<T> setter, String queryString, HttpContext context) {
    ...
}
setFromQueryString(() => myFoo.Age, i => myFoo.Age = i, "inputAge", context);

Problem

Is there anyway to pass the property of an Object by reference? I know I can pass the whole object but I want to specify a property of the object to set and check it's type so I know how to parse. Should I maybe take another approach (I cannot change the original object in anyway)? ``` public class Foo{ public Foo(){} public int Age { get; set; } } private void setFromQueryString(object aProperty, String queryString, HttpContext context) { //here I want to handle pulling the values out of //the query string and parsing them or setting them //to null or empty string... String valueString = context.Request.QueryString[queryString].ToString(); //I need to check the type of the property that I am setting. //this is null so I can't check it's type Type t = aProperty.GetType(); } private void callingMethod(HttpContext context) { Foo myFoo = new Foo(); setFromQueryString(myFoo.Age, "inputAge", context); } ```

Original source