Добавление дополнительного метода к строковому классу - C#

Обычно массив не будет инициализирован по умолчанию, но если вы инициализируете один или несколько элементов явно, любые оставшиеся элементы будут автоматически инициализированы равными 0. Поскольку 0 и NULL эквивалентны, вы можете инициализировать массив указателей на NULL как это:

float * foo[42] = { NULL }; // init array of pointers to NULL
14
задан Zach Johnson 31 December 2009 в 02:40
поделиться

4 ответа

Вы пытаетесь вызвать его по строке типа . Вам нужно вызвать его в строке instance , например

"{0}".SafeFormat("Hello");

По общему признанию, это не будет делать то, что вы хотите, потому что метод SafeFormat фактически полностью игнорирует первый параметр ( s ]) тем не мение. Это должно выглядеть так:

    public static string SafeFormat(this string fmt, params object[] args)
    {
        string formattedString = fmt;

        try
        {
            formattedString = String.Format(fmt, args);
        }
        catch (FormatException) {} //logging string arguments were not correct
        return formattedString;
    }

Затем вы можете вызвать:

"{0} {1}".SafeFormat("Hi", "there");

Смысл методов расширения в том, что они выглядят как методы instance расширенного типа. Вы не можете создавать методы расширения, которые выглядят статическими методами расширенного типа.

35
ответ дан 1 December 2019 в 06:18
поделиться

Вы определяете метод расширения экземпляра , а затем пытаетесь использовать его как статический метод . (C # не может определять статический метод расширения, хотя F # в этом отношении.)

Вместо:

result = string.SafeFormat("Hello");

вам нужно что-то вроде:

result = "Hello".SafeFormat();

т.е. вы работаете с экземпляром строки ("Hello" в данном случае).

10
ответ дан 1 December 2019 в 06:18
поделиться

Методы расширения появляются в экземплярах типа, а не в самом типе (например, статических членах).

3
ответ дан 1 December 2019 в 06:18
поделиться

попробуйте

"Hello".SafeFormat("{0} {1}", "two", "words")
2
ответ дан 1 December 2019 в 06:18
поделиться