Secondary constraints

1. What are the secondary constraints?

2. What does type parameter constraint (naked type constraint mean)?

The C# allows using interfaces as type constraints; therefore for instantiation we must use specific interfaces or classes that implement this interface.

The C# allows us to specify constraints by another type constraint.  When we need to enforce relationship between two type parameters we can use the naked type constraints.

Example 1:

       private static List<T> ConstrainedByInterfaceMethod<T>() where T : IComparable{

            return null;


        private static List<TBase> ConvertedList<TBase, T>(IList<T> param) where T : TBase{

            List<TBase> resList = new List<TBase>(param.Count);


            for (int i = 0; i < param.Count; i++ )



            return resList;



        static void Main(string[] args)


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


            IList<object> correct = ConvertedList<object, string>(stringList);


            //The type ‘string’ cannot be used as type parameter ‘T’ in the generic type or method


            //There is no implicit reference conversion from ‘string’ to ‘System.Exception’.

            IList<Exception> incorrect = ConvertedList<Exception, string>(stringList);


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s