Generic types API design - C#