powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / List<struct> имеет ли какой-то выйгрышь по сравнению с List<class> ?
5 сообщений из 30, страница 2 из 2
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
5 сообщений из 30, страница 2 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / List<struct> имеет ли какой-то выйгрышь по сравнению с List<class> ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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