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
.