Your question makes no sense because you can't ever use an open generic type to declare a storage location (like a local variable or field). It must always be closed.
I understand you want to pass a GenericDelegate<T>
to a method taking such a value as an argument. But even then the delegate type becomes closed with T
as the generic type parameter.
In your sample code you write
someDelegate = GenericMethod
but what type is someDelegate
supposed to have? It must either be obviously closed (GenericDelegate<string>
) or closed with a generic type parameter from the outer scope:
void SomeOuterMethod<T>() where T : ISomeClass {
GenericDelegate<T> someDelegate = GenericMethod<T>;
}
I hope I understood your problem. If not, please clarify. If you elaborate a little on what you want to accomplish I'll try to suggest a practical solution.
Other languages like Haskell do have support for passing around values of open generic types (in other words, you can have a variable of type IEnumerable<>
). This is required to implement monads. The CLR does not have that feature.
New thought: instead of a delegate you could create a non-generic base type with a generic method that can be overridden:
interface CheckHandler {
public void Check<T>(T someArg);
}
Hope that covers your scenario. You can not freely pass any CheckHandler
around. Its Check
method can then be called with an arbitrary type argument.
someDelegate
look like? (and what error are you getting?) – Kirk Woll