Объясните код c#

179
16 января 2019, 02:30

Вот код. Что делает, понять не могу. Да, методы делают сериализацию и обратно, но, например, что делает строка List<ListNode> arr = new List<ListNode>();?

public void Serialize(FileStream s)
{
    List<ListNode> arr = new List<ListNode>();
    ListNode temp = new ListNode();
    temp = Head;
    //transform nodes into List
    do
    {
        arr.Add(temp);
        temp = temp.Next;
    } while (temp != null);
    //write into file; data is modify for store index of .Random node
    using (StreamWriter w = new StreamWriter(s))
        foreach (ListNode n in arr)
            w.WriteLine(n.Data.ToString() + ":" + arr.IndexOf(n.Rand).ToString());
}
public void Deserialize(FileStream s)
{
    List<ListNode> arr = new List<ListNode>();
    ListNode temp = new ListNode();
    Count = 0;
    Head = temp;
    string line;
    //try read file and create List of nodes
    try
    {
        using (StreamReader sr = new StreamReader(s))
        {
            while ((line = sr.ReadLine()) != null)
            {
                if (!line.Equals(""))
                {
                    Count++;
                    temp.Data = line;
                    ListNode next = new ListNode();
                    temp.Next = next;
                    arr.Add(temp);
                    next.Prev = temp;
                    temp = next;
                }
            }
        }
        //declare Tail
        Tail = temp.Prev;
        Tail.Next = null;
        //return refs to Random nodes and restore Data
        foreach (ListNode n in arr)
        {
            n.Rand = arr[Convert.ToInt32(n.Data.Split(':')[1])];
            n.Data = n.Data.Split(':')[0];
        }
    }
Answer 1

В этих кавычках пишется обобщенный тип. В подсказках тебе будет показывать только список такого типа List<T> тут T это тот самый обобщенный тип который позволяет работать с любим типом данных только нужно наперед указать его в объявлении класса. Для чего это? Вот в пример тебе обобщенный метод не класс на методе будет нагляднее но суть от этого почти не измениться:

void Swap<T>(ref T a,ref T b){
    T temp = a;
    a = b;
    b = temp;
}

Всем известный метод смена переменных значениями. Но что тут делает какой-то тип T в треугольных кавычках? Это что-то на подобие object но во время вызова метода пользователь должен указать в этих кавычках какой тип данных принимает метод в качестве аргумента. Да, конечно, вы могли перегрузить метод для всех типов которые вы будете использовать? Но зачем (если вы не индус кончено), если можно сделать такой элегантный и простой код. В библиотеке классов System.Collections.Generics собраны несколько классов для работы с обобщенными типами, такие как: List<T>, Dictionary<K,V>, Queue<T>, Stack<T> и так далее. Вы наверное успели заметить какие-то другие буквы помимо Т в Dictionary<K,V>. Да в этом почти никакого отличия и нету. Вы можете как захотите назвать этот тип. Но принято если тип 1 то называть его T, а если 2 то T,U.

Теперь о коде. Если конкретно о коде который Вы попросили объяснить в комментариях:

List<ListNode> arr = new List<ListNode>(); //Список экземпляров класса ListNode (динамический массив)
ListNode temp = new ListNode(); //Новый экземпляр класса ListNode
temp = Head;//Присваивание экземпляру класса ListNode значение Head
//В цикле мы все узлы из файла переносим в список для дальнейшей работы с ним.
do
{
    arr.Add(temp);//Тут мы добавляем в список узел
    temp = temp.Next;//Тут мы переходим к следующему
} while (temp != null);//Пока узлы существуют

Думаю мой небольшой рассказ помог Вам понять предназначение обобщенных типов. Подробнее о них можете почитать по данной ссылке

SeeSharp

READ ALSO
Ошибка PHP Fatal error: require(): Failed opening required на php7.0 yii2

Ошибка PHP Fatal error: require(): Failed opening required на php7.0 yii2

На хостинге работало все нормально,как только перенес на vps ошибкалоги тут -

169
input[date] контроль

input[date] контроль

как сделать в input type=date так, что бы допустим щас 2018 год и в этом инпуте можно было выбрать дату только до 2018 года, если 2019 до 2019 , думаю смысл...

164
Вывод строк по id

Вывод строк по id

Только начал учить php(сразу на практике)Прошу вашей помощи

186
Зависимость от input

Зависимость от input

Есть таблица вот такая, все данные подгружаются из БД, каждый раз количество столбцов может быть разное

200