public abstract class BaseDocumentLayer : IDocumentLayer
{
public IDocumentLayer NextLayer { get;set;}
public virtual Document<T, U> ProcessDocument<T, U>(Document<T, U> document) {
if(NextLayer != null)
document = NextLayer.ProcessDocument(document);
return document;
}
}
public override Document<GenericDatabaseDTO, GenericDatabaseConstants.ActionType> ProcessDocument<GenericDatabaseDTO, GenericDatabaseConstants.ActionType>(Document<GenericDatabaseDTO, GenericDatabaseConstants.ActionType> document)
{
return base.ProcessDocument<GenericDatabaseDTO,
}
public static class GenericDatabaseConstants
{
public enum ActionType
{
CreateGeneric,
ReadGeneric,
UpdateGeneric,
DeleteGeneric,
}
}
Why do I get the error: Type paramter declaration must be an identifier not a type?

Error1:
public override Document<GenericDatabaseDTO, GenericDatabaseConstants.ActionType> ProcessDocument(Document<GenericDatabaseDTO, GenericDatabaseConstants.ActionType> document)
{
return base.ProcessDocument(document);
}
Error 1 ‘GenericDocumentLayer2.Document.GenericDatabase.ProcessLayer.ProcessDocument(GenericDocumentLayer2.TypeDefinition.Document)’: no suitable method found to override
I have not changed my origin BaseLayer.ProcessDocument method
UPDATE
public void Add(GenericDatabaseField field) {
var dto = new GenericDatabaseDTO();
dto.Field = field;
dto.Id = "test";
var document = new Document<GenericDatabaseDTO, GenericDatabaseConstants.ActionType>(dto, GenericDatabaseConstants.ActionType.CreateGeneric, null);
IDocumentLayer layer = DocumentFactory.CreateDocumentLayers();
// The generic ProcessDocument is never called just the base version
document = layer.ProcessDocument<GenericDatabaseDTO, GenericDatabaseConstants.ActionType>(document);
}
You can’t override a generic method for a specific type. This is possible with C++’s templates but not with C#’s generics.
To make your code compile, change it to this:
This will compile, but it will override the base type method for all generic arguments.
If you want to provide a special implementation just for one type, you can add a non-generic overload and internally call the generic version after the special handling:
However, please note that this will break in polymorphic scenarios like this one:
Assume the methods above are implemented in
Derived.Derivedis derived fromBase