Class Mapping Error: ‘T’ must be a non-abstract type with a public parameterless constructor

The problem is that you’re trying to use the T from SqlReaderBase as the type argument for MapperBase – but you don’t have any constraints on that T.

Try changing your SqlReaderBase declaration to this:

public abstract class SqlReaderBase<T> : ConnectionProvider
    where T : new()

Here’s a shorter example which demonstrates the same issue:

class Foo<T>
{
    Bar<T> bar;
}

class Bar<T> where T : new()
{
}

The fix is to change Foo<T>‘s declaration to:

class Foo<T> where T : new()

Then the compiler will know that the T from Foo is a valid type argument for Bar.

Leave a Comment