Вот шаблон, который я использую:
Сначала создайте интерфейс:
IFoo
{
int mValue {get; }
}
Затем класс "adhoc", который реализует интерфейс
AdHocIFoo : IFoo
{
Func<int> get_mValue;
public AdHocIFoo(Func<int> getValue)
{
this.get_mValue = getValue;
}
public int mValue { get { return get_mValue(); } }
}
Сейчас, если у вас есть типы, скажем, Bar и Person, определенные следующим образом:
class Bar
{
public int Baz { get; set; }
}
class Person
{
public int ID {get; set; }
}
Тогда вы можете использовать код, подобный следующему;
var bar = new Bar() { Baz = 3 };
var per = new Person() { ID = 43 };
var foo1 = new AdHocIFoo(x => bar.Baz);
var foo2 = new AdHocIFoo(x => per.ID);
var result1 = GetResult<AdHocIFoo>(foo1);
var result2 = GetResult<AdHocIFoo>(foo2);