Generics Challage: Assert Return Types Matches
I feel that I gave it too much already, and I am giving up. A workaround is too good for this issue.
Given the following class defination:
        public class Dog
        {        
               public static MethodInfo LastCall = null;        
               public class BarkInvocation<T>
               {        
                      public T Bark()        
                      {        
                             LastCall = (MethodInfo)MethodInfo.GetCurrentMethod();
                             return default(T);        
                      }        
               }        
                
               public T Bark<T>()        
               {        
                      return new BarkInvocation<T>().Bark();
               }        
}
Can you make this print true?
        public class Program
        {        
               [STAThread]        
               static void Main(string[] args)        
               {        
                      Dog d = new Dog();        
                      d.Bark<IList<string>>();
                      Type returnType = Dog.LastCall.ReturnType;
                
                      List<string> strings = new List<string>();
                
                      Console.WriteLine(returnType.IsInstanceOfType(strings));
               }        
}
 

Comments
IList<string> is not an instance of List<string>, isn't it?
Wow, this is a good one. The method's return type will always be T, because at runtime it's resolved from System.RuntimeType.
The only way I'd know of is to also have a LastReturnType static field on Dog and set it to typeof(T) in BarkInvocation<T>.Bark()... which I'm sure there's a reason you're not already doing (I know I hate to add what I feel are more fields that aren't required).
@Weex,
If you do a test as I mention above, you'll see that just calling
typeof(IList<string>).IsInstanceOf(new List<string>());
will return true.
Comment preview