How to pass a Generic class as a Parameter to a non-generic class constructor

c#, generics, parameter-passing

Solution

If you don't want to make `SynchRequestInfo` generic, can you make a non-generic base class for `ClientRequestInfo`? --

public abstract class ClientRequestInfo
{
    public abstract void NonGenericMethod();
}

public class ClientRequestInfo<K, V> : ClientRequestInfo
{
    public override void NonGenericMethod()
    {
        // generic-specific implementation
    }
}

Then:

public class SynchRequest
{
    private ClientRequestInfo info;

    private SynchRequest(ClientRequestInfo requestInfo)
    {
        this.info = requestInfo;
    }

    public void Execute()
    {
        // ADDED: for example
        info.NonGenericMethod();
    }
}

Problem

Assume the following code (Please read my question in the code comments in the final class): ``` //This is my Generic Class public class ClientRequestInfo<K, V> { public string Id { get; set; } private Dictionary<K, V> parameters; public ClientRequestInfo() { parameters = new Dictionary<K, V>(); } public void Add(K key, V value) { parameters.Add(key, value); } } public class ProcessParameters() { private void CreateRequestAlpha() { ClientRequestInfo<int, string> info = new ClientRequestInfo<int, string>(); info.Add(1, "Hello"); SynchRequest s = new SynchRequest(info); s.Execute(); } private void CreateRequestBeta() { ClientRequestInfo<int, bool> info = new ClientRequestInfo<int, bool>(); info.Add(1, true); SynchRequest s = new SynchRequest(info); s.Execute(); } } public class SynchRequest { //What type should I put here? //I could declare the class as SynchRequest<K, V> but I don't want //To make this class generic. private ClientRequestInfo<????,?????> info; private SynchRequest(ClientRequestInfo<?????,?????> requestInfo) { //Is this possible? this.info = requestInfo; } public void Execute() {} } ```

Original source

Related problems