Другой способ сделать это - просто вызвать GetProperties()
на интерфейсе внутри объекта, а не на самом объекте.
public static void DisplayObjectInterface(object source, Type InterfaceName)
{
// Get the interface we are interested in
var Interface = source.GetType().GetInterface(InterfaceName.Name);
if (Interface != null)
{
// Get the properties from the interface, instead of our source.
var propertyList = Interface.GetProperties();
foreach (var property in propertyList)
Debug.Log(InterfaceName.Name + " : " + property.Name + "Value " + property.GetValue(source, null));
}
else
Debug.Log("Warning: Interface does not belong to object.");
}
Мне нравится делать InterfaceName
параметр Type
, чтобы избежать опечаток при поиске GetInterface()
по имени строки.
Использование:
DisplayObjectInterface(Obj, typeof(InterFaceNameGoesHere));
РЕДАКТИРОВАТЬ : Я только что заметил, что ваш пример был коллекцией, это не сработает для коллекции, переданной в целом. Вы должны будете передать каждый элемент в отдельности. У меня возникает соблазн удалить, но это, вероятно, поможет другим пользователям, которые задают этот же вопрос в поисках решения, не связанного с коллекцией.