Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
34 / 25 / 11
Регистрация: 19.03.2020
Сообщений: 353

Поле типа T

03.05.2020, 09:56. Показов 1343. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вопрос в следующем, есть метод Add:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
tree.Add(Main[i].Data, Main[i].Weight);
 
 
public Node<T> Root { get; set; }
        public int Count { get; set; }
        public void Add(T data, T weight)
        {
            if (Root == null)
            {
                Root = new Node<T>(data);
                Root.Weight = weight;
                Count = 1;
                return;
            }
            Root.Add(data, weight);
            Count++;
        }
 
 class Node<T> : IComparable<T>, IComparable
        where T : IComparable, IComparable<T>
    {
        public T Data { get; set; }
        public T Weight { get; set; }
        public Node<T> Left { get; private set; }
        public Node<T> Right { get; private set; }
        public Node(T data)
        {
            Data = data;
        }
 
 
 
        public Node(T data, T weight, Node<T> left, Node<T> right)
        {
            Data = data;
            Left = left;
            Right = right;
            Weight = weight;
        }
    }
Проблема заключается в следующем, в первой строке первым аргументом мне нужно передавать такую структуру, но программа требует int:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public struct Book
        {
            public char[] author;
            public char[] tittle;
            public char[] publish;
            public int year;
            public int pages;
 
            public Book(char[] a, char[] t, char[] p, int y, int pg)
            {
                author = a;
                tittle = t;
                publish = p;
                year = y;
                pages = pg;
            }
        }
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.05.2020, 09:56
Ответы с готовыми решениями:

Статическое поле абстрактного класса в как наследуемое поле и преведение его типа
public abstract class BaseManager : BaseClass { public static BaseManager Instance { get; private set; } public...

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

Нужно из базы MSSQLSERVER2000 вычитать поле типа Image в переменную типа Image
На C# из базы MSSQLSERVER2000 вычитать поле типа Image в переменную типа Image пишу так string mySelectQuery = 'SELECT image...

8
 Аватар для Enifan
1849 / 1191 / 501
Регистрация: 14.10.2018
Сообщений: 3,211
03.05.2020, 10:09
перегрузить Add?
переделать принимаемый аргументы Add?
0
34 / 25 / 11
Регистрация: 19.03.2020
Сообщений: 353
03.05.2020, 10:18  [ТС]
Цитата Сообщение от Enifan Посмотреть сообщение
переделать принимаемый аргументы Add?
Я это сделаю, только в худшем случае, просто я не понимаю почему такая ошибка получается, T это вроде бы как универсальный тип, разве нет?

Добавлено через 1 минуту
Как вариант я ещё рассматриваю, изменить тип data с T на тип Book.
0
 Аватар для Enifan
1849 / 1191 / 501
Регистрация: 14.10.2018
Сообщений: 3,211
03.05.2020, 10:29
Лучший ответ Сообщение было отмечено Korsner как решение

Решение

Цитата Сообщение от Korsner Посмотреть сообщение
T это вроде бы как универсальный тип
Да именно так, но как только создается новый класс, то данный тип закрепляется за этим объектом
C#
1
2
        Tree<int> tree = new Tree<int>();
        Tree<Book> tree2 = new Tree<Book>();
В 1-ом случаи будет работать только с int, во 2-м только с книгой

Добавлено через 3 минуты
А вообще вот вам пример с любой коллекцией, например List<>, создаете List<int>, сперва вы добавляете int, потом захотелось добавить double или new Book - что в итоге ?
0
34 / 25 / 11
Регистрация: 19.03.2020
Сообщений: 353
03.05.2020, 10:37  [ТС]
Цитата Сообщение от Enifan Посмотреть сообщение
Да именно так, но как только создается новый класс, то данный тип закрепляется за этим объектом
Я слепой именно эту строчку я искал и не мог найти
0
34 / 25 / 11
Регистрация: 19.03.2020
Сообщений: 353
03.05.2020, 10:42  [ТС]
Только возникла другая проблема и так как я с этим ни разу не сталкивался, я не знаю как она решается.
C#
1
var tree = new Tree<Book>();
Миниатюры
Поле типа T  
0
34 / 25 / 11
Регистрация: 19.03.2020
Сообщений: 353
03.05.2020, 10:53  [ТС]
Хотя я кажется понимаю в чём проблема, но не уверен, если изменю порядок добавления что то изменится.

Добавлено через 9 минут
Грубо говоря, если я делаю так:
C#
1
var tree = new Tree<Book>();
То структура упаковывается в data, но после этого я не могу вызвать поле структуры, например так:
C#
1
data.year
0
 Аватар для Enifan
1849 / 1191 / 501
Регистрация: 14.10.2018
Сообщений: 3,211
03.05.2020, 11:14
Цитата Сообщение от Korsner Посмотреть сообщение
вызвать поле структуры
надо вернуть объект, после этого можно будет обращаться к переменным
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using System;
 
class Tree<T>
{
    T Data;
    public void Add(T data) { Data = data; }
    public T Get() { return Data; }
}
 
struct Book
{
    public int year;
}
 
class Program
{
    static void Main()
    {
        Tree<Book> tree = new Tree<Book>();
        tree.Add(new Book());
        Console.WriteLine(tree.Get().year); // year по умолчанию = 0
    }
}
0
34 / 25 / 11
Регистрация: 19.03.2020
Сообщений: 353
03.05.2020, 11:16  [ТС]
Всё понял, спасибо большое.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.05.2020, 11:16
Помогаю со студенческими работами здесь

Поле типа Regex
Привет всем. Извиняюсь за мини созданную тему, но форум для этого и предназначен чтобы спрашивать. Итак создаю класс Regi, в нем создаю...

Возможности рефлексии - запись поле в зависимости от типа аргумента
Тренировался в написании Generic методов и задался вопросом, - можно ли в зависимости от типа входящего аргумента записывать данные в то...

Как поле объектного типа передаётся в метод: по ссылке или по значению
существует объектное поле Pole pole; вот полная реализация типа Pole: public class Pole { ... } при передачи этого...

Объявить класс, содержащий поле целого типа две константы, задающие допустимый диапазон
задание такое :5. Объявить класс, содержащий поле целого типа две константы, задающие допустимый диапазон значения этого поля и свойства...

Массив типа decimal конвертировать в список типа List<KeyValuePair>
Имеется строка: &quot;1, 0.014, 2, 0.015, 3, 0.079, 4, 0.674, 5, 0.016, 6, 0.012&quot;. Где 1,2,3,4,5,6 - ключ, значения типа decimal - значение. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru