2015-11-13 2 views
0

У меня есть метод, который возвращает propertyInfo для данного типа. Я вызываю этот метод с объектом интерфейса, но type.IsInterface возвращает false.type.IsInterface return false для интерфейса

public IEnumerable<PropertyInfo> GetProperties(Type type) 
{ 
    if (!type.IsInterface) 
     return type.GetProperties(); 

    return (new Type[] { type }) 
      .Concat(type.GetInterfaces()) 
      .SelectMany(i => i.GetProperties()); 

} 

Может кто-нибудь сказать мне, что здесь не так?

Я использую rhino mock для генерации интерфейса, который переходит к этой функции.

Вот код, как я звоню эту функцию ...

var info = GetProperties(pCache.Data.GetType()) 

в этом, данных является объектом IdataCache.

+0

Показать код, где вы вызываете этот метод. –

+0

обновленный вопрос. – Abhash786

+2

У вас есть экземпляр ('pCache.Data'). Это объект, экземпляр класса (вы не можете создать экземпляр интерфейса). ['GetType'] (https://msdn.microsoft.com/en-us/library/system.object.gettype (v = vs.110) .aspx) возвращает этот тип класса. Вы не можете называть 'GetType' ни на чем, и он вернет интерфейс. Вы можете вызвать свой метод, как 'GetProperties (typeof (IFoo))', который передаст интерфейс этому методу. В этом случае 'IsInterface' вернет true. –

ответ

2

PCache.Data является экземпляром pCache.Data.GetType(), и его тип не может быть интерфейсом и должен быть конкретным.

pCache.Data.GetType() всегда будет возвращать тип экземпляра, и если это IdataCache то IdataCache является конкретным типом