2010-02-16 1 views
5

Я только заметил, что я могу сделать следующее, что явилось полной неожиданностью для меня:Какие методы в структуре 3.5 имеют подпись типа String.Format?

Console.WriteLine("{0}:{1}:{2}", "foo", "bar", "baz"); 

Это работает для метода Write тоже. Какие другие методы поддерживают подписи, не требуя использования String.Format?

Debug.WriteLine не ...
HttpResponse.WriteLine не ...

(И на стороне записки, я не мог найти быстрый способ поиска для этого с Reflector. Что такое хорошо способ для поиска конкретных сигнатур)

Edit:

Специально для 3,5 рамки.

+0

Не имеет прямого отношения к вашему вопросу, но большинство методов 'ToString()' также будут принимать форматирование и могут быть быстрее, чем метод 'String.Format'. –

+0

Было бы неплохо увидеть, что это реализовано на C#: http://tirania.org/blog/archive/2009/Dec-20.html – RedFilter

ответ

4

Есть много методов, которые поддерживают это по всей структуре. Все подклассы TextWriter (и поэтому StreamWriter и StringWriter и их подклассы) наследуют метод Write, который поддерживает это.

Другим примером, который часто используется, является StringBuilder.AppendFormat.

Вы также можете написать собственные методы, чтобы поддержать это. Вы можете сделать это, имея перегрузку с параметром строки формата и другой параметр с params ключевым словом, например:

public void Foo(string message) { 
    // whatever 
} 

public void Foo(string format, params string[] arg) { 
    Foo(string.Format(format, arg)); 
} 
+0

* Есть много методов * - таких как? Это ** есть ** вопрос :) – RedFilter

+1

@Orbman: Извините! Это правда, но другие уже предложили еще 4 хороших ответа, и я не хочу просто вставлять ответы всех остальных в мой пост. Вместо этого я попытался придумать какую-то новую и соответствующую информацию, которая может быть полезной для вас или для кого-то еще здесь. :) –

+0

совершенно! Все вклады с радостью приняты :) – RedFilter

4

У экземпляров StringBuilder есть метод AppendFormat.

У экземпляров StringWriter есть перезагрузка Write, которая принимает параметры формата.

+0

Интересно, как они использовали отдельное имя метода для этого, я полагаю, потому что иначе он столкнется с сигнатурой '(String, Int32, Int32). Заставляет меня задаться вопросом, почему они не стандартизировали этот подход для согласованности и вместо этого применяют метод «Debug.WriteLineFormat». – RedFilter

0

Класс StringBuilder имеет метод, называемый AppendFormat, который ведет себя таким же образом

1

Debug.WriteLine(string, params Object[] args) перегрузки делает это, а также, будучи добавлено в .NET 4.0.

+1

Это похоже на поддержку только в .NET Framework 4. Не работает в 3.5. – RedFilter

+0

@OrbMan - Хороший улов, добавил к описанию. –

Смежные вопросы