C # - сделать вывод строки на консоль по-другому, но использовать в другом месте в ее первоначальном виде - PullRequest
1 голос
/ 29 мая 2011

У меня странный вопрос.Вот и все -

Давайте рассмотрим следующий фрагмент кода:

string test ="this is a test string";
Console.WriteLine(test);

Я хочу напечатать другую вещь - например, yup, this is a test string.На самом деле, я хочу посмотреть, соответствует ли строка некоторому шаблону, и если да, то я хочу, чтобы она печаталась по-другому.Я хочу, чтобы это имело место, только когда я печатаю его на консоли, но всякий раз, когда я использую его в другом месте, он должен быть оригинальным.

Я надеялся, что смогу написать метод расширения для класса String (или Object class?) и заставить ToString () возвращаться в соответствии с моими потребностями, но документы говорят:

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

Есть ли такая возможность?Я не могу использовать новый тип.Или, может быть, попытка заставить ToString () вести себя иначе - это не тот путь.Но есть ли способ заставить определенную строку печатать на консоли по-другому, но использовать ее в оригинальном виде в другом месте?

Ответы [ 2 ]

3 голосов
/ 29 мая 2011

Вы можете сделать что-то вроде этого:

public static class StringExtension
{
    public static void WriteToConsole(this string text)
    {
        string result;
        if (<matches1>)
            result = "111";
        else if (<matches1>)
            result = "222";
        Console.WriteLine(result);
    }
}

И использование будет:

string test = "this is a test string";
test.WriteToConsole();
1 голос
/ 29 мая 2011

Технически, вы можете реализовать IFormatProvider и передать его Console.WriteLine.

. Чтобы использовать его по умолчанию, вы можете попытаться настроить пользовательский [CultureInfo] (* 1007).* и установите его для использования вашим приложением.

Никогда не пробовал, так что будьте бдительны.

...