Переопределение методов для массивов

208
19 мая 2017, 12:29

Вопрос к любознательным гуру C#.

В книге CLR via C# есть неплохой пример расширения класса StringBuilder, цель автора воссоздать метод IndexOf, который есть у простого string.

public static class StringBuilderExtensions
{
    public static Int32 IndexOf(this StringBuilder sb, char value)
    {
        for (int index = 0; index < sb.Length; index++)
            if (sb[index] == value) return index;
        return -1;
    }
}

Взяв за основание этот пример, захотелось попробовать реализовать нечто подобное для класса Array.

Например для вывода в консоль содержащихся в массиве данных пробую сделать следующее:

public static class ArrayExtensions
{
    public static String ToString(this int[] arr)
    {
        string str = "";
        for(int i = 0; i < arr.Length-1; i++)
            str += arr[i] + " ";
        return str;
    }
}

Только вот попытка вызвать неявный ToString(), вызывает стандартный GetType.ToString(). Как можно обойти это ограничение? Переопределить неявное преобразование?

Код вызова из программы:

int[] arr = new int[5]{23,24,66,33,7};
Console.WriteLine(arr);
Answer 1

При одинаковых именах встроенные (в класс или в его родителей) методы имеют приоритет перед методами расширения. Выход - используйте другое имя. Либо вызывайте его так: ArrayExtensions.ToString(arr); (хотя смысла в этом мало)

READ ALSO
Авторизация Googel API

Авторизация Googel API

Сейчас моё приложение использует для регистрацииjson файл

202
Считывание текстового файла

Считывание текстового файла

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

205
Как указать COLLATE для столбца таблицы?

Как указать COLLATE для столбца таблицы?

Имеется проект EF6 (code-First)В сущности File имеется свойство FullPath, содержащее полный путь к файлу в верхнем регистре

166
How to bind datagrid to a List [требует правки]

How to bind datagrid to a List [требует правки]

I have a datagrid and I want to save information , which was updated in datagrid

153