Обычно массив не будет инициализирован по умолчанию, но если вы инициализируете один или несколько элементов явно, любые оставшиеся элементы будут автоматически инициализированы равными 0. Поскольку 0 и NULL
эквивалентны, вы можете инициализировать массив указателей на NULL
как это:
float * foo[42] = { NULL }; // init array of pointers to NULL
Вы пытаетесь вызвать его по строке типа . Вам нужно вызвать его в строке 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 расширенного типа. Вы не можете создавать методы расширения, которые выглядят статическими методами расширенного типа.
Вы определяете метод расширения экземпляра , а затем пытаетесь использовать его как статический метод . (C # не может определять статический метод расширения, хотя F # в этом отношении.)
Вместо:
result = string.SafeFormat("Hello");
вам нужно что-то вроде:
result = "Hello".SafeFormat();
т.е. вы работаете с экземпляром строки ("Hello" в данном случае).
Методы расширения появляются в экземплярах типа, а не в самом типе (например, статических членах).
попробуйте
"Hello".SafeFormat("{0} {1}", "two", "words")