public static void Main()
Console.WriteLine( true == ShouldSkip(typeof(Identifiable)));
Console.WriteLine( true == ShouldSkip(typeof(Identifiable<int>)));
Console.WriteLine( true == ShouldSkip(typeof(IIdentifiable)));
Console.WriteLine( true == ShouldSkip(typeof(IMongoDbIdentifiable)));
Console.WriteLine( false == ShouldSkip(typeof(Article)));
Console.WriteLine( false == ShouldSkip(typeof(string)));
Console.WriteLine( false == ShouldSkip(typeof(int)));
Console.WriteLine( false == ShouldSkip(typeof(ComplexType)));
private static bool ShouldSkip(Type type)
return type.IsInterface || type.IsAbstract || !typeof(IIdentifiable).IsAssignableFrom(type);
public interface IIdentifiable { }
public interface IMongoDbIdentifiable : IIdentifiable { }
public abstract class Identifiable : Identifiable<int> { }
public abstract class Identifiable<T> : IIdentifiable { }
public class Article : Identifiable { }
public class ComplexType { }