Optimizing your code

You are developing a reusable library for doing complex calculations. Your application is gaining popularity, but you are starting to hear some negative responses. Some say that your types cannot be used easily. When displaying the end results of calculations to the end user, there is a lot of manual work involved. Others experience performance problems and want you to do something about it. You started developing your application with C# 1.0, and your application uses ArrayLists to keep track of all the parameters needed for the calculations. Your parameters are implemented as a struct. Your algorithms are implemented in a class hierarchy, and you often need to cast a base type to a derived type. Because this isn’t always possible, you have added a lot of try/catch statements to recover from errors. Answer the following questions:

How can a generic collection improve performance?
Is there anything you can do to avoid the exceptions when converting between types?
How can you ensure your type is better converted to the basic CLR types?