¿Puedo hacer que una directiva de preprocesador dependa de la versión de .NET Framework?

Aquí hay un ejemplo concreto de lo que quiero hacer.

Considera elstring.Join función. Antes de .NET 4.0, solo había dos sobrecargas, las cuales requerían unastring[] parámetro.

A partir de .NET 4.0, hay nuevas sobrecargas que toman tipos de parámetros más flexibles, incluidosIEnumerable<string>.

Tengo una biblioteca que incluye unJoin función que hace esencialmente lo que .NET 4.0string.Join función hace. Me preguntaba si podría hacer que la implementación de esta función dependa del marco .NET al que se dirige. Si 4.0, simplemente podría llamarstring.Join internamente. Si es 3.5 o anterior, podría llamar a su propia implementación interna.

¿Tiene sentido esta idea?Si tiene sentido, ¿cuál es la forma más lógica de hacerlo? Supongo que solo estoy asumiendo que una directiva de preprocesador tendría más sentido, ya que una llamada astring.Join con unIEnumerable<string> parámetro ni siquieracompilar cuando se dirige a una versión .NET anterior a la 4.0; así que cualquier enfoque que use tendría que tener lugar antes de la compilación. (Revisando elEnvironment.Version la propiedad en tiempo de ejecución, por ejemplo, no funcionaría).

Respuestas a la pregunta(3)

Su respuesta a la pregunta