Type pattern in C#