Вызовите пользовательский метод, который получает и возвращает строку точно так же, как большинство методов класса String в .NET вызываются на C#

#c#

Вопрос:

Я пытался создать метод, который выполняет «процесс очистки строк», и хотел использовать его так, как можно было бы использовать простое string.Trim() или string.Normalize() .

Метод

 public string ToFriendlyDOSNameString(string input)
{
    Regex whitespaces = new Regex(".*?([ ]{2,})");
    input = input.Normalize().Replace("\", " ").Replace("/", " ").Replace(""", " ")
                             .Replace("*", " ").Replace(":", " ").Replace("?", " ")
                             .Replace("<", " ").Replace(">", " ").Replace("|", " ")
                             .Replace("!", " ").Replace(".", " ").Replace("'", " ").Trim();
    string clone = input;
    foreach (Match match in whitespaces.Matches(input))
    {
        clone = clone.Replace(match.Groups[1].Value, " ");
    }
    input = clone;
    return input;
}
 

И то, что я ищу, — это способ использовать этот метод следующим образом:

 string example = "Some Random Text";
example = example.ToFriendlyDOSNameString();
 

Для справки, в настоящее время я использую это в консольном приложении, и этот метод находится прямо под «основным методом», я точно не знаю, где бы я разместил метод, чтобы он вел себя так, как я хочу…

Ответ №1:

В вашем методе расширения отсутствует несколько вещей:

  • Метод должен быть static ;
  • В string параметре должно использоваться this ключевое слово.

Пример:

 public static class StringExtensions
{
    public static string ToFriendlyDosNameString(this string input)
    {
        // Your logic.
    }
}
 

Дополнительная информация:

Методы расширения (Руководство по программированию на C#)

Ответ №2:

 public static class Utilities {
    public static string ToFriendlyDOSName(this string str) {
        str = "new friendly value";
        // modify the value according to your logic
        return str;
    }
}
 

тогда вы можете использовать его, как вы упомянули

 string myName = "unfriendly name";
myName.ToFriendlyDOSName();