В моем проекте есть несколько модульных тестов, в которых мы хотим иметь возможность устанавливать некоторые свойства, которые имеют частные сеттеры. В настоящее время я делаю это с помощью отражения и этого метода расширения:
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);
Как я могу это сделать?