One other question, if I may: what are the ramifications of using routines
that aren't CLS-compliant? I may want to run this code on a Web server. Is
that going to be a problem?
CLS is all about language interoperability and defining a lowest
common set of features that all managed languages should be able to
support. It's not related to security. So CLS is really only relevant
for people writing components that may be consumed by other languages.
If you do that, you may want to restrict your public interfaces to CLS
compliant features (or at least provide CLS compiliant alternatives).
Consuming non-CLS compilant stuff in your own code is generally not a
problem. That's an implementation detail that others don't care about.
However, one of the things that aren't CLS compilant are pointer
types, and to enable use of pointer types in C# you have to turn on
unsafe code. And _that_ may affect your code's ability to execute in
partially trusted environments.
Does that answer your question?
Mattias