Как создать publi c String Заменить на 4 метода - PullRequest
3 голосов
/ 01 мая 2020

In. NET Core 2.0,. NET Core 3.1 - строка с четырьмя перегрузками. У меня есть проект библиотеки классов, где мне нужно использовать эту строку замены. К сожалению, мой целевой фреймворк - 4.6, и в System String, похоже, нет «String.Replace» с четырьмя перегрузками, как в приведенном ниже коде. Можно ли использовать строку замены в расширении для Visual Studio 2015 C#?

. Мне удалось собрать только один из методов с этого сайта, и я не могу понять, остальные три. Любая помощь будет принята с благодарностью.

        //
    // Parameters:
    //   oldValue:
    //
    //   newValue:
    //
    //   ignoreCase:
    //
    //   culture:
    public String Replace(String oldValue, String newValue, bool ignoreCase, CultureInfo culture);
    //
    // Parameters:
    //   oldValue:
    //
    //   newValue:
    //
    //   comparisonType:
    public String Replace(String oldValue, String newValue, StringComparison comparisonType);
    //
    // Summary:
    //     Returns a new string in which all occurrences of a specified string in the current
    //     instance are replaced with another specified string.
    //
    // Parameters:
    //   oldValue:
    //     The string to be replaced.
    //
    //   newValue:
    //     The string to replace all occurrences of oldValue.
    //
    // Returns:
    //     A string that is equivalent to the current string except that all instances of
    //     oldValue are replaced with newValue. If oldValue is not found in the current
    //     instance, the method returns the current instance unchanged.
    //
    // Exceptions:
    //   T:System.ArgumentNullException:
    //     oldValue is null.
    //
    //   T:System.ArgumentException:
    //     oldValue is the empty string ("").
    public String Replace(String oldValue, String newValue);
    //
    // Summary:
    //     Returns a new string in which all occurrences of a specified Unicode character
    //     in this instance are replaced with another specified Unicode character.
    //
    // Parameters:
    //   oldChar:
    //     The Unicode character to be replaced.
    //
    //   newChar:
    //     The Unicode character to replace all occurrences of oldChar.
    //
    // Returns:
    //     A string that is equivalent to this instance except that all instances of oldChar
    //     are replaced with newChar. If oldChar is not found in the current instance, the
    //     method returns the current instance unchanged.
    public String Replace(char oldChar, char newChar);

Спасибо.

1 Ответ

2 голосов
/ 01 мая 2020

Правильно, . NET Ядра String.Replace отличается от . NET Frameworks String.Replace .

Вы можете добавить отсутствующие функции с помощью собственные методы расширений, описанные в документах Microsoft .

Хорошей отправной точкой для этого является проверка реализации отсутствующих методов в . NET реализациях ядер .

Таким образом, вы сможете реализовать недостающий метод, соответствующий вашим потребностям.

Udate:

Давайте посмотрим на ваши отмеченные вызовы на SharpHa sh здесь и здесь :

hex.Replace(delimeter.ToString(), "", true, CultureInfo.CurrentCulture);

Похоже, целью этой операции является просто использование ignoreCase для правильной обработки шестнадцатеричного ввода, культура должна быть установлена ​​в этом случае, но может игнорироваться. Зная это, мы могли бы предоставить простую альтернативную реализацию в качестве метода расширения с использованием функций регулярных выражений:

public static class StringExtensions
{
    public static string Replace(this string str, string oldValue, string newValue,
        bool ignoreCase, CultureInfo culture)
    {
       return Regex.Replace(str, oldValue, newValue,
           ignoreCase ? RegexOptions.IgnoreCase : RegexOptions.None);
    }
}

Обратите внимание, что в этой реализации нет полной замены исходного метода , поскольку такие вещи, как

  • Элементы языка регулярных выражений в строке
  • Производительность
  • Культура

не наблюдаются. Но для вашей проблемы решения должно быть достаточно. Если нет, попробуйте расширить и изменить решение, как требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...