Как передать свойство через лямбда-выражение?

В моем проекте есть несколько модульных тестов, в которых мы хотим иметь возможность устанавливать некоторые свойства, которые имеют частные сеттеры. В настоящее время я делаю это с помощью отражения и этого метода расширения:

public static void SetPrivateProperty(this object sourceObject, string propertyName, object propertyValue)
{
    sourceObject.GetType().GetProperty(propertyName).SetValue(sourceObject, propertyValue, null);
}

Предполагая, что у меня есть TestObject, подобный этому:

public class TestObject
{
    public int TestProperty{ get; private set; }
}

Затем я могу вызвать это в своих модульных тестах следующим образом:

myTestObject.SetPrivateProperty("TestProperty", 1);

Однако я хотел бы иметь проверку правильности имя свойства во время компиляции, и поэтому я хотел бы иметь возможность передавать свойство через выражение, например:

myTestObject.SetPrivateProperty(o => o.TestProperty, 1);

Как я могу это сделать?

8
задан Sterno 17 April 2012 в 14:44
поделиться