Есть ли способ установить C # только для чтения автоматически реализованных свойств через отражение? - PullRequest
1 голос
/ 01 декабря 2010

Название говорит все: Есть ли способ установить C # только для чтения автоматически реализованных свойств через отражение?

typeof(Change)
    .GetProperty("ChangeType", BindingFlags.Instance | BindingFlags.Public)
    .SetValue(myChange, change.ChangeType.Transform(),null);

В этой строке выдается ошибка: System.ArgumentException - {"Метод набора свойств не найден."} . Дело в том, что я не могу использовать GetField , потому что нет полей.

Прежде чем вы спросите, я делаю это, потому что мне нужно "дополнить" уже готовую библиотеку, и у меня нет доступа к ее коду.

Ответы [ 2 ]

4 голосов
/ 01 декабря 2010

Это должно сработать, поэтому есть то, о чем вы нам не говорите. Вы уверены, что это автоматически реализованное свойство? Объяснение, согласующееся с тем, что вы видите, состоит в том, что свойство не реализуется автоматически и не имеет установщика.

То есть

public class Foo { public int Bar { get; set; } }

typeof(Foo).GetProperty("Bar").SetValue(foo, 42);

удастся, но

public class Foo { public int Bar { get { return 42; } } }

typeof(Foo).GetProperty("Bar").SetValue(foo, 42);

не будет и выдаст исключение с сообщением, которое вы видите.

1 голос
/ 01 декабря 2010

очевидным выводом будет то, что Change.ChangeType не имеет открытого установщика экземпляров.

...