Bhanu Pratap Verma Ответов: 3

Как использовать универсальное расширение для метода generic array в C#


Привет, я пытаюсь создать свой собственный класс, как список универсального класса, предоставленного моей microsoft.

ниже приведен мой код:

namespace OwnGenricClass
{
    class Program
    {
        static void Main(string[] args)
        {
            Owngeneric<int> _test = new Owngeneric<int>();
            _test.addvalue(12);
            _test.addvalue(13);
            _test.addvalue(14);
            _test.addvalue(15);
            _test.addvalue(16);
            _test.extnlenght(); //showing error
            
        }
    }

    public class Owngeneric<T>
    {
        int i = 0;

        public T[] _data = new T[1];

        public void addvalue(T value)
        {
            _data[i] = value;
            i++;
            Array.Resize(ref _data, _data.Length + 1);
        }
    }

    public static class ExtensionMethodsClass
    {
        public static int extnlenght<T>(this T[] entity)
        {            
            return entity.Count();
        }
    }
}


Что я уже пробовал:

Я хочу получить длину массива my generic type из метода extension.

Я создал, но когда я собираюсь использовать его, показывая ошибку времени компиляции, его не в состоянии распознать на основе типа.

3 Ответов

Рейтинг:
27

F-ES Sitecore

Ваше расширение действует на тип Owngeneric<t> Так что это то, что должно быть вашим "этим"

public static int extnlenght<T>(this Owngeneric<T> entity)
{
    return entity.Count; // We also need to create the Count property
}


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

public class Owngeneric<T>
{
    int i = 0;

    public T[] _data = new T[1];

    public void addvalue(T value)
    {
        _data[i] = value;
        i++;
        Array.Resize(ref _data, _data.Length + 1);
    }

    public int Count
    {
        get
        {
            return _data.Length;
        }
    }
}


Graeme_Grant

Я думал о том же самом, но заданный вопрос касался общих массивов...

F-ES Sitecore

_data-это "универсальный массив", его вопрос был больше о методах расширения, чем о массивах :)

Рейтинг:
1

Graeme_Grant

Прочтите этот замечательный ответ: c# - почему Array не является универсальным типом? - переполнение стека[^]

Вам было бы лучше работать с List<T> для коллекций. Вот вам и закуска: Учебник коллекций в C# примеры использования местного | Майкрософт документы[^]


Bhanu Pratap Verma

Не могли бы вы подсказать мне, как исправить приведенный выше код?

Graeme_Grant

Нажмите на ссылку на Microsoft Docs, и она ответит на ваши вопросы...

Рейтинг:
0

Bhanu Pratap Verma

Привет,
Приведенное выше предложение кода работает для меня.

Спасибо вам за ваш ответ, Ребята, это действительно ценится.