VDima77 Ответов: 2

C# как вызвать метод интерфейса из списка свойств


Привет,
У меня есть следующий простой интерфейс
публичный интерфейс IWrite {

void SaveToFile(путь к строке);
}

публичный класс а :IWrite {

[CustomSerialize('некоторое значение')]
public B B1 {get;set}

[CustomSerialize('некоторое значение')]
public C C1 {get;set}


}

публичный класс B :IWrite{
}

публичный Класс C :IWrite{
}


Я написал следующий код, чтобы получить список свойств, имеющих мой пользовательский атрибут из класса А

List<propertyinfo> result = this.Метод gettype().Метод getproperties()
.Где(
p =>
п
.GetCustomAttributes(typeof(CustomSerializeAttribute), false)
.Любой(ка =&ГТ; ((CustomSerializeAttribute) Калифорния).SerializeType == 'значение')
)
.Список();


Я знаю, что каждый propertyInfo в списке результатов имеет реализацию интерфейса IWrite

Мой вопрос заключается в том , как на самом деле я вызываю метод SaveToFile() для каждого свойства в списке результатов

Значит , я хотел бы вызвать SaveToFile() для объектов B1 и C1

Большое спасибо,
Димитрий

Что я уже пробовал:

Я пытался

результат.По каждому элементу(х =&ГТ;
MethodInfo m = x.PropertyType.GetMethod("SaveToFile");
м. Вызов(х.И getValue(это, значение null), новый объект[] { "путь" });

Но GetMethod возвращает всегда null

Что я делаю не так ??

lmoelleb

Обычно GetMethod возвращает null, если флаги привязки неверны. Но если вы получаете значение свойства и знаете, что оно реализует IWrite - почему бы просто не привести его к IWrite и не вызвать SaveToFile напрямую?

2 Ответов

Рейтинг:
2

BillWoodruff

Я не понимаю, почему вы думаете, что вам нужно размышлять здесь.

Вы можете сериализовать экземпляр 'A, и это будет включать в себя экземпляры 'B, 'C: публичные свойства как с 'get, так и с 'set могут быть сериализованы: [^].


Рейтинг:
14

#realJSOP

Вместо вызова метода get., почему бы вам просто не получить значение свойства.?