powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Использование Span C#
21 сообщений из 21, страница 1 из 1
Использование Span C#
    #39972017
Фотография Renziglov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет
Пытаюсь реализовать Clone через стек:

Код: c#
1.
2.
3.
4.
5.
6.
EmployeeDTO e = new EmployeeDTO() { RecId = 34299 };
            Span<EmployeeDTO> dst = new Span<EmployeeDTO>(new EmployeeDTO[] { new EmployeeDTO()});
            dst.Fill(e);
            //src.CopyTo(dst);
            EmployeeDTO e1 = dst[0];
            e1.FirstName = "Roady Rory";



В коде e должно клонироваться в e1 при помощи стека, но клонирования не происходит. Оба e и e1 ссылаются на одну и ту же область памяти (последняя строка кода меняет FirstName как в e так и в e1)

Span вроде ж должен помещать e1 в другую область адресов стека? Или я не прав?
Спасибо.
...
Рейтинг: 0 / 0
Использование Span C#
    #39972146
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Renziglov
Span вроде ж должен помещать e1 в другую область адресов стека? Или я не прав?


Не прав.

Span по сути это всего лишь ссылка на область памяти, может ссылаться на любую область памяти, не только на стеке.

Если хотите на стеке, нужно делать так:

Код: c#
1.
Span<EmployeeDTO> dataOnStack = stackalloc EmployeeDTO[] { new EmployeeDTO() };



Но опять таки, в данном случае EmployeeDTO -- это класс, значит в массиве у вас окажутся ссылки на объекты в куче, а не сами объекты.
Так что вы ничего не выигрываете таким образом.
Не нужен вам Span.

Модератор: Тема перенесена из форума "Программирование".
...
Рейтинг: 0 / 0
Использование Span C#
    #39972173
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я правильно понимаю, что ты хочешь сделать клонирование объекта без копирования руками всех его свойств? Почему тогда не взять просто автомеппер?
...
Рейтинг: 0 / 0
Использование Span C#
    #39972318
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>fkthat, сегодня, 08:12 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1326677&msg=22155675][22155675]
>Я правильно понимаю …
<В таком случае, может быть применить это
Использую так, пример:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
    //-- Сущность, что ассоциируется с записью таблицы базы данных
    public class row_Entity : ICloneable {
      public row_Entity(bool _chb_Entity, Guid _pk_Entity,long _ts_Entity, string _str_Группа) {
        this.chb_Entity = _chb_Entity;
        this.pk_Entity  = _pk_Entity;
        this.ts_Entity = _ts_Entity;
        this.str_Группа = _str_Группа;
      }
      public row_Entity() { }
      public bool chb_Entity { get; set; }
      public Guid pk_Entity { get; set; }
      public long ts_Entity { get; set; }
      public string str_Группа { get; set; }
      public object Clone() { return this.MemberwiseClone(); }
    }
. . . 
xrow = (row_Entity)dgv_Entity.SelectedItem; yrow = (row_Entity)xrow.Clone();
...
Рейтинг: 0 / 0
Использование Span C#
    #39972325
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев,

Все еще плохо понимаю, а зачем там Span? Ты чего добиться пытаешься-то?
...
Рейтинг: 0 / 0
Использование Span C#
    #39972357
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat,

Ну вообще Span предпочтительно использовать во всех новых интерфейсах, на на вход принимается массив.

Т.е. вместо класического Some<T>(T[] array, int offset, int count) крайне желательно писать так Some<T>(Span<T> span). А ещё предпочтительно принимать ReadOnlySpan, если не планируется вносить изменений в массив.
...
Рейтинг: 0 / 0
Использование Span C#
    #39972405
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

Span<T> инвариантен, в отличии от ссылочного массива
даже не знаю, такое ограничение, это плюс или минус :)
...
Рейтинг: 0 / 0
Использование Span C#
    #39972412
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>fkthat, сегодня, 12:34 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1326677&msg=22155890][22155890]
>...Ты чего добиться пытаешься-то?
<
TC -->"Пытаюсь реализовать Clone через стек"
У меня такой же вопрос.
xrow - состояние сущности после UPDATE
yrow - состояние сущности до UPDATE
и оптимистическая блокировка
...
Рейтинг: 0 / 0
Использование Span C#
    #39972422
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes
hVostt,

Span<T> инвариантен, в отличии от ссылочного массива
даже не знаю, такое ограничение, это плюс или минус :)


Смотря в каком контексте? )
...
Рейтинг: 0 / 0
Использование Span C#
    #39972423
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев
xrow - состояние сущности после UPDATE
yrow - состояние сущности до UPDATE


Если бы кто-то мозги не колупал, а назвал переменные beforeUpdateRow и afterUpdateRow, не нужны были бы эти бессмысленные объяснения и мусорные комментарии.
...
Рейтинг: 0 / 0
Использование Span C#
    #39972450
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Ну вообще Span предпочтительно использовать во всех новых интерфейсах, на на вход принимается массив.

Я не знал. Впрочем, не могу припомнить, когда мне последний раз приходила в голову дурная идея передавать в метод массив вместо какой-либо абстракции.
...
Рейтинг: 0 / 0
Использование Span C#
    #39972480
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
hVostt
Ну вообще Span предпочтительно использовать во всех новых интерфейсах, на на вход принимается массив.

Я не знал. Впрочем, не могу припомнить, когда мне последний раз приходила в голову дурная идея передавать в метод массив вместо какой-либо абстракции.


Когда дело дойдёт до оптимизации узких мест, может и дойти до этого )
...
Рейтинг: 0 / 0
Использование Span C#
    #39972500
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Когда дело дойдёт до оптимизации узких мест, может и дойти до этого )

Я еще раз убеждаюсь, что любая новая фича языка или фреймворка используется в первую очередь для её жесткого абьюза. Я вот про неё до сих пор вообще только краем уха знал, зато ТС уже успел на ней какой-то неработающий говнокод наговнокодить, ничего личного
...
Рейтинг: 0 / 0
Использование Span C#
    #39972501
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
hVostt
Когда дело дойдёт до оптимизации узких мест, может и дойти до этого )

Я еще раз убеждаюсь, что любая новая фича языка или фреймворка используется в первую очередь для её жесткого абьюза. Я вот про неё до сих пор вообще только краем уха знал, зато ТС уже успел на ней какой-то неработающий говнокод наговнокодить, ничего личного


Это на самом деле очень крутая штука с точки зрения оптимизации производительности.
Ну и для проектирования интерфейсов, работающих с большими объёмами данных.

Но это ещё что.

В 9-ке ожидаются DU, вот это просто будет революция, не меньше.
...
Рейтинг: 0 / 0
Использование Span C#
    #39972504
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Но это ещё что. В 9-ке ожидаются DU, вот это просто будет революция, не меньше.

Я от этого уже ожидаю только еще больше говнокода
...
Рейтинг: 0 / 0
Использование Span C#
    #39972506
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
hVostt
Но это ещё что. В 9-ке ожидаются DU, вот это просто будет революция, не меньше.

Я от этого уже ожидаю только еще больше говнокода


Вовсе наоборот. Уйдут всякие говёненькие нашлёпки вида OperationResult ))
...
Рейтинг: 0 / 0
Использование Span C#
    #39972531
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>hVostt, сегодня, 14:44 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1326677&msg=22156029][22156029]
>Если бы кто-то мозги не колупал, а назвал переменные…
<
Зачем?
xrow используется так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
    //-- Строку таблицы базы данных отражаем на сущность 
    private void RowToEntity_upd(IDataRecord record) {
      if (record.FieldCount != 1) { RowToEntity(record); xrow.chb_Entity = true; }
      else { xrow = (row_Entity)yrow.Clone(); xrow.ts_Entity = wsp.TS_Entity(record.GetValue(0)); }
    }
    private void RowToEntity(IDataRecord record) {
       xrow = new row_Entity() {
        chb_Entity = false,
        pk_Entity = (record.IsDBNull(0)) ? гп.gd_0 : (Guid)record.GetGuid(0),
        ts_Entity = (record.IsDBNull(1)) ? 0 : wsp.TS_Entity(record.GetValue(1)),
        str_Группа = (record.IsDBNull(2)) ? "???" : ((string)record.GetString(2)).Trim()
      };  
      lst_Entity?.Add(xrow);
    }

и применяется в обработчиках SELECT, INSERT, UPDATE, DELETE
...
Рейтинг: 0 / 0
Использование Span C#
    #39972555
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев
>hVostt, сегодня, 14:44 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1326677&msg=22156029][22156029]
>Если бы кто-то мозги не колупал, а назвал переменные…
<
Зачем?
xrow используется так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
    //-- Строку таблицы базы данных отражаем на сущность 
    private void RowToEntity_upd(IDataRecord record) {
      if (record.FieldCount != 1) { RowToEntity(record); xrow.chb_Entity = true; }
      else { xrow = (row_Entity)yrow.Clone(); xrow.ts_Entity = wsp.TS_Entity(record.GetValue(0)); }
    }
    private void RowToEntity(IDataRecord record) {
       xrow = new row_Entity() {
        chb_Entity = false,
        pk_Entity = (record.IsDBNull(0)) ? гп.gd_0 : (Guid)record.GetGuid(0),
        ts_Entity = (record.IsDBNull(1)) ? 0 : wsp.TS_Entity(record.GetValue(1)),
        str_Группа = (record.IsDBNull(2)) ? "???" : ((string)record.GetString(2)).Trim()
      };  
      lst_Entity?.Add(xrow);
    }


и применяется в обработчиках SELECT, INSERT, UPDATE, DELETE


Из названия переменной невозможно понять, что она означает и для чего используется.

К слову это касается и всего остального кода.
...
Рейтинг: 0 / 0
Использование Span C#
    #39972556
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев
и применяется в обработчиках SELECT, INSERT, UPDATE, DELETE


И ещё, для переноса данных между методами используются поля класса (xrow, yrow..).
Что мешает, например, у метода RowToEntity возвращать данные, а не писать в поле класса?

Ведь это превращает обычный-то в общем код, в натуральный говнокод.
Зачем ходить и трясти своим говнокодом в каждой ветке форума, вместо того, чтобы взять и улучшить его?

Видимо это особая форма вуайеризма .
...
Рейтинг: 0 / 0
Использование Span C#
    #39972596
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>hVostt, сегодня, 21:32 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1326677&msg=22156278][22156278]
>...Что мешает, например, у метода…
<
А зачем, чем так плохо?
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
namespace ns_Решение {
  public partial class uc_Группы : UserControl, I_Плитка  {
    ObservableCollection<row_Entity> oc_Entity=new ObservableCollection<row_Entity>();  //-- Показываем в DataGrid 
    List<row_Entity> lst_Entity; //-- Временное хранение выборки
    public row_Entity xrow, yrow;
    . . . 
    //-- локальное представление сущности, что ассоциируется со строкой выборки из базы данных
    public class row_Entity : ICloneable {
      . . .
    }
    . . .  
  }
}
...
Рейтинг: 0 / 0
Использование Span C#
    #39972598
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев
А зачем, чем так плохо?


Затем, что вы используете поля класса не по назначению.
Поля класса служат для хранения состояние экземпляра класса.

Для передачи данных в C# есть мощные инструменты:

1. Аргументы функции
2. Возвращаемый результат функции
3. Возвращаемые через out аргументы функции

Но нет предела совершенству.
Давайте ещё раз посмотрим на ваш код, как можно сделать ещё более хуже:

Код: 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.
    //-- Строку таблицы базы данных отражаем на сущность 

    // уберём аргумент функции record -- нафиг он нужен?
    //private void RowToEntity_upd(IDataRecord record) {
    // вот так вообще бомба! record теперь поле класса
    private void RowToEntity_upd() {
      // ну зачем нам делать по-человечески и передавать данные через аргументы функции?
      // и тем более получать данные через результат функции, правда?      
      //if (record.FieldCount != 1) { RowToEntity(record); xrow.chb_Entity = true; }
      // сделаем всё максимально через жопу 
      // теперь RowToEntity всё будет брать из полей класса
      if (record.FieldCount != 1) { RowToEntity(); xrow.chb_Entity = true; }
      else { xrow = (row_Entity)yrow.Clone(); xrow.ts_Entity = wsp.TS_Entity(record.GetValue(0)); }
    }

    //исправляем метод, делаем по канону выбранного стиля говнокодинга
    //private void RowToEntity(IDataRecord record) {
    // ну вот, теперь нет лишних буков
    private void RowToEntity() {       xrow = new row_Entity() {
        chb_Entity = false,
        pk_Entity = (record.IsDBNull(0)) ? гп.gd_0 : (Guid)record.GetGuid(0),
        ts_Entity = (record.IsDBNull(1)) ? 0 : wsp.TS_Entity(record.GetValue(1)),
        str_Группа = (record.IsDBNull(2)) ? "???" : ((string)record.GetString(2)).Trim()
      };  
      lst_Entity?.Add(xrow);
    }



Почему вы не идёте до конца в своих подходах? Откажитесь от того, чтобы ваши функции возвращали значение и не используйте аргументы функции. Просто заведите ещё пару десятков полей в классе.

В следующий раз, я больше не буду пытаться вам объяснить очевидные вещи, просто буду помечать код, который вы публикуете, что это отвратительный и мерзкий говнокодище, дно в программировании, чтобы новички, которые будут читать форум случайно не использовали эту практику.

Не обижайтесь. Вы не хотите развиваться, я понял. Ваше право. Но и моё право писать о том, когда вы публикуете говнокод, ещё и почему-то гордитесь этим. Хотя я бы даже лет 10-15 назад постеснялся подобным гордиться и вообще кому-то показывать.
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Использование Span C#
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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