I have a method that given a delegate Type argument (not a generic), it returns a Delegate that it created that implements the signature. It internally creates a dynamic method using Expression trees. The delegate type must be of this form Func<SomeParam,IamDerivedObject>,a func where IamDerivedObject is an inheritor of IamDerivedObject. The method uses the type information to figure out which object to instance, so simply using the interface for creation would be disastrous. The calling is done from a static method that returns IamDerivedObject.
In .NET 4 code, I can do this::
var myDelegate = MakeMethod(typeArgument) as Func<SomeParam,IamDerivedObject>
In .Net 3.5 this does not work. And I’m stuck with having to know the type to call the invoke method, or using another expression generated delegate to invoke it and cache that delegate. This means more runtime generated code.
Unfortunately, I cannot use the .NET 4 code as the assembly for the time being must be .NET 3.5 code as it relies on a third party dll which does not work in 4.0.
I figured out an approach, but it basically requires some reflection magic to figure it out.
I’m not going to leave up my delegatehelper class unless somebody else can really want it. But the point is it is possible, and actually pretty quick. Conversion is usually less than 1ms, not nearly as fast as method group conversion which is near instantaneous, but you know thats something.