You can use the dynamic keyword for this with .NET 4.0, since you're dealing with built in types. Otherwise, you'd use polymorphism for this.
Example:
using System;
using System.Collections.Generic;
class Test
{
static void Main()
{
List
Prints out:
I'm a date
I'm a bool
I'm an int