Существует ли способ создать анонимные структуры в C#?

Кажется, нет никакого пути, поскольку анонимные типы происходят из объекта. Но я думал, что спрошу с большой части времени мы используем анонимные типы в выражениях простого запроса для извлечения подмножеств данных, которые будут использоваться в тех анонимных типах, которые мы создаем. Это просто кажется мне, они должны быть структурами (типы значения) для большей эффективности памяти по сравнению со ссылочными типами.

Мысли?

32
задан Boydski 15 February 2010 в 16:27
поделиться

3 ответа

Нет, не существует поддерживаемого синтаксиса C#, который бы создавал анонимные структуры

30
ответ дан 27 November 2019 в 20:46
поделиться

UPDATE: В C# 7 появились кортежи типа value, которые можно использовать в тех же контекстах, в которых используются анонимные типы ссылочного типа.


Существует распространенное мнение, что типы значений "более эффективны", чем ссылочные типы. Это совершенно мифическое представление; они более эффективны для одних операций и менее эффективны для других.

Например, большие типы значений менее эффективны по сравнению со ссылочными типами, если единицей работы, о которой вы беспокоитесь, является работа "скопировать значение в новое место". Ссылочный тип копирует ссылку размером с указатель независимо от размера ссылаемых данных и поэтому копирует за одну высоко оптимизированную машинную инструкцию. Тип значения копирует размер данных каждый раз, что может быть довольно большим и занимать несколько инструкций.

Независимо от этого, анонимные типы являются исключительно удобной функцией. Если вам не нравятся их рабочие характеристики, вы не обязаны их использовать. Вы можете определить свой собственный struct, если хотите.

17
ответ дан 27 November 2019 в 20:46
поделиться

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

3
ответ дан 27 November 2019 в 20:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: