2013-09-24 6 views
9

ho il seguente codice, dove T è un generico definiti come tali:Perché la mia dichiarazione C# IS non funziona?

public abstract class RepositoryBase<T> where T : class, IDataModel 

Questo codice funziona bene:

PropertyInfo propertyInfo = typeof(T).GetProperty(propertyName); 
if (propertyInfo.DeclaringType.FullName == typeof(T).FullName) <--- Works just fine 

vs questo codice, che è falsa

PropertyInfo propertyInfo = typeof(T).GetProperty(propertyName); 
if (propertyInfo.DeclaringType is T) <-- does not work 

Cosa sto facendo male qui?

+0

http://www.youtube.com/watch?v=j4XT-l-_3y0 – JoelFan

risposta

24

is utilizza il confronto dei tipi tra i due oggetti. Quindi DeclaringType è di tipo Type e typeof(T) è di tipo T, che non sono uguali.

var aType = typeof(propertyInfo.DeclaringType); 
var bType = typeof(T); 
bool areEqual = aType is bType; // Always false, unless T is Type 
4

Quello che state cercando è

TypeIsAssignableFrom

if (propertyInfo.DeclaringType.IsAssignableFrom(typeof(T)))