Могу ли я сделать директиву препроцессора зависимой от версии .NET framework?

Вот конкретный пример того, что я хочу сделать.

Рассмотрим функцию string.Join . До .NET 4.0 было только две перегрузки, обе из которых требовали параметра string [] .

Начиная с .NET 4.0, появились новые перегрузки, использующие более гибкие типы параметров, включая IEnumerable .

У меня есть библиотека, которая включает функцию Join , которая выполняет в основном то же самое, что и функция .NET 4.0 string.Join . Мне просто было интересно, могу ли я сделать реализацию этой функции зависимой от целевой платформы .NET. Если бы 4.0, он мог бы просто вызвать string.Join внутри. Если версия 3.5 или старше, она может вызывать собственную внутреннюю реализацию.

  1. Имеет ли смысл эта идея?
  2. Если она имеет смысл, каков наиболее логичный способ ее реализации? Полагаю, я просто предполагаю, что директива препроцессора будет иметь наибольший смысл, поскольку вызов string.Join с параметром IEnumerable даже не будет компилироваться при нацеливании на версию .NET старше 4.0; поэтому любой подход, который я использую, должен выполняться до компиляции. (Например, проверка свойства Environment.Version во время выполнения не сработает.)
15
задан Brian Tompsett - 汤莱恩 9 July 2016 в 12:13
поделиться