public static void Main()
var wrapped = new Wrap<Foo>();
var id = wrapped.Project(x=>x.FooID);
wrapped.Project(x=>x.FooID = 99);
id = wrapped.Project(x=>x.FooID);
Console.WriteLine("Hello World");
public class Wrap<TModel>
public TModel InternalObject { get; set; }
this.InternalObject = Activator.CreateInstance<TModel>();
public TResult Project<TResult>(Func<TModel, TResult> function)
return function.Invoke(this.InternalObject);
public int FooID{get;set;}