Ayende @ Rahien

My name is Oren Eini
Founder of Hibernating Rhinos LTD and RavenDB.
You can reach me by phone or email:


+972 52-548-6969

, @ Q c

Posts: 6,007 | Comments: 44,760

filter by tags archive

Generics Challage: Assert Return Types Matches

time to read 13 min | 2573 words

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



       static void Main(string[] args)


              Dog d = new Dog();


              Type returnType = Dog.LastCall.ReturnType;


              List<string> strings = new List<string>();








IList is not an instance of List, isn't it?

Doug Mayer

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.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).


If you do a test as I mention above, you'll see that just calling

typeof(IList).IsInstanceOf(new List());

will return true.

Comment preview

Comments have been closed on this topic.


No future posts left, oh my!


  1. Speaking (3):
    23 Sep 2015 - Build Stuff 2015 (Lithuania & Ukraine), Nov 18 - 24
  2. Production postmortem (11):
    22 Sep 2015 - The case of the Unicode Poo
  3. Technical observations from my wife (2):
    15 Sep 2015 - Disk speeds
  4. Find the bug (5):
    11 Sep 2015 - The concurrent memory buster
  5. Buffer allocation strategies (3):
    09 Sep 2015 - Bad usage patterns
View all series



Main feed Feed Stats
Comments feed   Comments Feed Stats