powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / List<struct> имеет ли какой-то выйгрышь по сравнению с List<class> ?
30 сообщений из 30, показаны все 2 страниц
List<struct> имеет ли какой-то выйгрышь по сравнению с List<class> ?
    #39032174
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет.

Мне нужно чтобы функция возвращала IEnumerable "чего-то".
Это "чего-то" я могу объявить классом или структурой.

Есть ли выигрыш, если сделать структурой ? Или выигрыш появляется только если работа идет с единственным элементом - и тогда его имеет смысл объявлять структурой ?

Ну и вообще есть ли смысл в List<структура> где бы то ни было ?
Ну и еще. Выигрыш появляется И когда принимать структуру И когда возвращать, или только когда принимается ?
...
Рейтинг: 0 / 0
List<struct> имеет ли какой-то выйгрышь по сравнению с List<class> ?
    #39032180
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смысл появится только тогда (или его отсутствие станет очевидным), когда ты осознаешь, для чего это делается.
...
Рейтинг: 0 / 0
List<struct> имеет ли какой-то выйгрышь по сравнению с List<class> ?
    #39032190
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,

Мне нужно чтобы функция распарсила файл. А на выход выдала пары:
1. дата начала
2. дата конец.

Вот эту пару хочу обернуть - либо в класс, либо в структуру.

Их там много в файле. Соответственно, функция будет возвращать СПИСОК этих пар.

Объединять ли эти пары в структуру или класс?
Мне вообще не совсем ясно есть ли выигрыш от Листа (находящегося в куче), который держит ссылки на структуры в стеке. Есть сомнения в выигрыше вообще. Тем более сомнения связаны с тем, что функция должна возвращать этот список. А не принимать.

Что скажете ?
...
Рейтинг: 0 / 0
List<struct> имеет ли какой-то выйгрышь по сравнению с List<class> ?
    #39032192
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PS. А ведь есть же специальная генерик структура, с разным количеством параметров. Забыл ее название.
Которую можно использовать, чтобы не создавать свой тип структуры. Можно вот ее использовать.

Но вопрос остается - нужен ли СПИСОК этих структур.
...
Рейтинг: 0 / 0
List<struct> имеет ли какой-то выйгрышь по сравнению с List<class> ?
    #39032193
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если просто создать список - то без разницы. Если потом будет адовая работа с этим списком, то лучше массив структур.
...
Рейтинг: 0 / 0
List<struct> имеет ли какой-то выйгрышь по сравнению с List<class> ?
    #39032197
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,

Вспомнил. Tuple зовется структура.

Работы со структурами не будет какой-то большой. Простая проверка на попадание в дату. И все, после этого список не нужен.
...
Рейтинг: 0 / 0
List<struct> имеет ли какой-то выйгрышь по сравнению с List<class> ?
    #39032201
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotekAntonariy,

Вспомнил. Tuple зовется структура.

Работы со структурами не будет какой-то большой. Простая проверка на попадание в дату. И все, после этого список не нужен.тогда что удобней и быстрей накодить.
...
Рейтинг: 0 / 0
List<struct> имеет ли какой-то выйгрышь по сравнению с List<class> ?
    #39032213
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ок. тогда просто Tuple. Плюс в том, что не придется делать отдельного описания типа.
все равно этот набор возвращается лишь в одном месте. Нету смысла выделять в целый именованный класс.
...
Рейтинг: 0 / 0
List<struct> имеет ли какой-то выйгрышь по сравнению с List<class> ?
    #39032232
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotek,
Tuple работает с классами, а не структурами - если что.
...
Рейтинг: 0 / 0
List<struct> имеет ли какой-то выйгрышь по сравнению с List<class> ?
    #39032246
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AxeleronProBiotek,
Tuple работает с классами, а не структурами - если что.
WUT?
Код: c#
1.
var t = Tuple.Create(123, DateTime.Now);


- вполне нормально компилируется. Документация мало того, что не говорит о таких ограничениях - в ней самой же есть примеры, где фигурирует Tuple со структурными типами.
...
Рейтинг: 0 / 0
List<struct> имеет ли какой-то выйгрышь по сравнению с List<class> ?
    #39032255
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны,
Я неправильно выразился. Имел в виду, что Tuple - сам по себе класс.
...
Рейтинг: 0 / 0
List<struct> имеет ли какой-то выйгрышь по сравнению с List<class> ?
    #39032259
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AxeleronСон Веры Павловны,
Я неправильно выразился. Имел в виду, что Tuple - сам по себе класс.

Пожалуй сойдет.
Все одно, выгодны в List<struct> не обнаружено в случае возврата десятка пар дат, зато создавать именованный тип не придется.
...
Рейтинг: 0 / 0
List<struct> имеет ли какой-то выйгрышь по сравнению с List<class> ?
    #39032496
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotekЕсть ли выигрыш, если сделать структурой ? Или выигрыш появляется только если работа идет с единственным элементом - и тогда его имеет смысл объявлять структурой ?
Будет большой выигрыш по памяти в случае использования структур. Читать .

ProBiotekМне нужно чтобы функция распарсила файл. А на выход выдала пары
Можно использовать структуру System.Collections.Generic.KeyValuePair.
Tuple, как уже было сказано, является классом .

ProBiotekесть ли выигрыш от Листа (находящегося в куче), который держит ссылки на структуры в стеке.

Все структуры будут в куче, компактно, одна за одной.
...
Рейтинг: 0 / 0
List<struct> имеет ли какой-то выйгрышь по сравнению с List<class> ?
    #39032499
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В целом, я бы посоветовал создать специальный класс с говорящим названием.
Чтобы получить профит от структур их надо уметь готовить. А судя по уровню задаваемых вопросов, возникают сомнения.
...
Рейтинг: 0 / 0
List<struct> имеет ли какой-то выйгрышь по сравнению с List<class> ?
    #39032531
Фотография Denis.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotek... от Листа (находящегося в куче), который держит ссылки на структуры в стеке. ...
Что скажете ?
Скажем что ты пока плоховато разобрался в том о чем говоришь
...
Рейтинг: 0 / 0
List<struct> имеет ли какой-то выйгрышь по сравнению с List<class> ?
    #39032614
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petalvik,
Denis.

Какой тогда смысл использовать списки структур, если они все равно улетают в кучу, как и класс ?
Тогда однозначно получается что структура даже противопоказана , т.к. будет лишний боксинг. не ?

petalvikProBiotekесть ли выигрыш от Листа (находящегося в куче), который держит ссылки на структуры в стеке.

Все структуры будут в куче, компактно, одна за одной.

Я так понимаю, будут рядом чисто за счет того, что Лист внутри себя использует массив ? В классическом понимании связанных списков то они вовсе не обязательно будут рядом.

Выходит, что вообще проще оперировать массивами :)
...
Рейтинг: 0 / 0
List<struct> имеет ли какой-то выйгрышь по сравнению с List<class> ?
    #39032621
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotekТогда однозначно получается что структура даже противопоказана , т.к. будет лишний боксинг. не ?
В generic-листе никакого боксинга не будет.
...
Рейтинг: 0 / 0
List<struct> имеет ли какой-то выйгрышь по сравнению с List<class> ?
    #39032629
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotekКакой тогда смысл использовать списки структур, если они все равно улетают в кучу, как и класс ?
Тогда однозначно получается что структура даже противопоказана , т.к. будет лишний боксинг. не ?

В классическом понимании связанных списков то они вовсе не обязательно будут рядом.
В любой generic-коллекции боксинга структур не будет. Это специальная чёрная магия платформы .NET. Именно поэтому СиШарпо-бояре всегда свысока смотрели на Джава-холопов.
...
Рейтинг: 0 / 0
List<struct> имеет ли какой-то выйгрышь по сравнению с List<class> ?
    #39032630
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныProBiotekТогда однозначно получается что структура даже противопоказана , т.к. будет лишний боксинг. не ?
В generic-листе никакого боксинга не будет.

Да ? А как структура, находящаяся в List<> улетит в кучу без боксинга ?
...
Рейтинг: 0 / 0
List<struct> имеет ли какой-то выйгрышь по сравнению с List<class> ?
    #39032632
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotekДа ? А как структура, находящаяся в List<> улетит в кучу без боксинга ?

В кучу улетит массив структур
...
Рейтинг: 0 / 0
List<struct> имеет ли какой-то выйгрышь по сравнению с List<class> ?
    #39032634
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pallaris,

однако. ну тогда, выгода от структур в списке будет:

- со структурами в кучу улетит массив структур. Одним неразделенным куском
- с классами в кучу улетит массив указателей - на кучу объектов размазанных по всей куче.

Хм.
...
Рейтинг: 0 / 0
List<struct> имеет ли какой-то выйгрышь по сравнению с List<class> ?
    #39032637
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В случае с объектами для листа в куче будет массив ссылок на объекты, которые будут разбросаны по куче и для доступа к ним нужно будет эти ссылки разыменовать
...
Рейтинг: 0 / 0
List<struct> имеет ли какой-то выйгрышь по сравнению с List<class> ?
    #39032693
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotek,

Универсальные типы во время выполнения . Если владеешь английским, то лучше в оригинале почитать, потому что перевод на русский корявый.
...
Рейтинг: 0 / 0
List<struct> имеет ли какой-то выйгрышь по сравнению с List<class> ?
    #39032757
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как я понял, автор просто думал, что структуры могут храниться только в стеке?
...
Рейтинг: 0 / 0
List<struct> имеет ли какой-то выйгрышь по сравнению с List<class> ?
    #39032822
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
List<struct> имеет ли какой-то выйгрышь по сравнению с List<class> ?
    #39033111
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesкак я понял, автор просто думал, что структуры могут храниться только в стеке?
про боксинг я знаю.
был вопрос про именно более сложный случай - Листа (который, к тому же, внутри использует массив) структур. У меня возник вопрос. теперь я его, вроде, прояснил. Надо еще прочитать вышеприведенные ссылки на теорию, как время выкрою.
...
Рейтинг: 0 / 0
List<struct> имеет ли какой-то выйгрышь по сравнению с List<class> ?
    #39033347
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Списки структур и классов ведут себя по разному, чего не скажешь про массивы.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
 public struct MyStruct
        {
            public int I { get; set; }
        }
        public class MyClass
        {
            public int I { get; set; } 
        }
  static void Main(string[] args)
        {
            var l = new List<MyStruct>() {new MyStruct() {I = 1}};
            var a = new[] {new MyStruct() {I = 1}};
            var l1 = new List<MyClass>() {new MyClass() {I = 1}};
            l1[0].I = 7;
            l[0].I = 2;
            a[0].I = 2;
}


Сработает?
...
Рейтинг: 0 / 0
List<struct> имеет ли какой-то выйгрышь по сравнению с List<class> ?
    #39033412
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВ,

Не вижу подвоха. Наверное сработает. Инициализация есть у всех этих типов ? Индексатор есть у всех ?

ps. Есть правда одна загвоздка связанная со списками. Их вроде не рекомендуется проходить более одного раза. А обращаясь к списку через интексатор мы это и провоцируем. Студия наверное пропишет Варнинг, что "возможен множественный проход по ienumerable". Работать будет это лишь предупреждение.
Больше проблем не вижу.
...
Рейтинг: 0 / 0
List<struct> имеет ли какой-то выйгрышь по сравнению с List<class> ?
    #39033413
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а хотя. тут List, а не IEnumerable. вообще проблем не должно быть.
...
Рейтинг: 0 / 0
List<struct> имеет ли какой-то выйгрышь по сравнению с List<class> ?
    #39033417
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВСписки структур и классов ведут себя по разному, чего не скажешь про массивы.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
 public struct MyStruct
        {
            public int I { get; set; }
        }
        public class MyClass
        {
            public int I { get; set; } 
        }
  static void Main(string[] args)
        {
            var l = new List<MyStruct>() {new MyStruct() {I = 1}};
            var a = new[] {new MyStruct() {I = 1}};
            var l1 = new List<MyClass>() {new MyClass() {I = 1}};
            l1[0].I = 7;
            l[0].I = 2;
            a[0].I = 2;
}


Сработает?
В случае с List<MyStruct> не скомпилируется, потому что индексатор List<T> возвращает значение _items[n], где _items = T[], и в случае value-типа мы получим на выходе копию этого value-типа, которая неизменяемая. Будет ошибка компиляции "Cannot modify the expression because it is not a variable". Аналогия -
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
class Program
{
  public struct MyStruct
  {
    public int I { get; set; }
  }
  static readonly MyStruct[] myStructs = new [] {new MyStruct{I=1} };
  static MyStruct GetMyStruct()
  {
    return myStructs[0];
  }
  static void Main(string[] args)
  {
    GetMyStruct().I = 2;
    Console.WriteLine("done");
    Console.ReadKey(true);
  }
}
...
Рейтинг: 0 / 0
30 сообщений из 30, показаны все 2 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / List<struct> имеет ли какой-то выйгрышь по сравнению с List<class> ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]