Кроме для запросов LINQ, как Вы используете анонимные типы в C#?

            var name = Console.ReadLine();
            var category = new Category { Name = name };
            db.Categories.Add(category);

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

5
задан Community 23 May 2017 в 11:50
поделиться

6 ответов

С небольшим количеством отражения можно превратить анонимный тип в Словарь <строка, объект>; Roy Osherove заносит свою технику в блог для этого здесь: http://weblogs.asp.net/rosherove/archive/2008/03/11/turn-anonymous-types-into-idictionary-of-values.aspx

Jacob Carpenter использует анонимные типы в качестве способа инициализировать неизменные объекты с синтаксисом, подобным для возражения инициализации: http://jacobcarpenter.wordpress.com/2007/11/19/named-parameters-part-2/

Анонимные типы могут использоваться в качестве способа дать более легкие к чтению псевдонимы свойствам объектов в наборе, выполняемом с помощью итераций с a foreach оператор. (Хотя, честно говоря, это - действительно не что иное как стандартное использование анонимных типов с LINQ к Объектам.), Например:

Dictionary<int, string> employees = new Dictionary<int, string>
{
    { 1, "Bob" },
    { 2, "Alice" },
    { 3, "Fred" },
};

// standard iteration
foreach (var pair in employees)
    Console.WriteLine("ID: {0}, Name: {1}", pair.Key, pair.Value);

// alias Key/Value as ID/Name
foreach (var emp in employees.Select(p => new { ID = p.Key, Name = p.Value }))
    Console.WriteLine("ID: {0}, Name: {1}", emp.ID, emp.Name);

В то время как нет большого улучшения этого краткого образца, если foreach цикл был длиннее, относясь к ID и Name мог бы улучшить удобочитаемость.

6
ответ дан 18 December 2019 в 07:57
поделиться

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

Одной вещью, которую я хотел бы видеть, является способность создать "названный" типами с простыми объявлениями, которые генерировали бы свойства и конструктора таким же образом что касается анонимных типов, а также переопределяющий Equals/GetHashCode/ToString тем же (полезным) способом. Те типы могли затем быть преобразованы в "нормальные" типы, когда потребность добавить больше поведения возникла.

Снова, я не думаю, что использовал бы его ужасно часто - но время от времени способность будет удобна, особенно в рамках нескольких методов класса. Это могло, возможно, быть частью большего усилия оказать больше поддержки неизменным типам в C# 5.

3
ответ дан 18 December 2019 в 07:57
поделиться

ASP.NET MVC направляющее использование эти объекты повсеместно.

5
ответ дан 18 December 2019 в 07:57
поделиться

Добавить к тому, какая сказанная Справедливость, ASP.NET MVC является первым местом, я видел их используемые интересными и полезными способами. Вот один пример:


Html.ActionLink("A Link", "Resolve", new { onclick = "someJavascriptFn();" })

ASP.NET MVC использует анонимные типы как это для добавления произвольных атрибутов к элементам HTML. Я предполагаю, что существует много различных способов, которыми Вы могли выполнить то же самое, но мне нравится краткий стиль анонимных типов, это дает вещам больше динамического чувства языка.

3
ответ дан 18 December 2019 в 07:57
поделиться

Самое большое использование для анонимных типов является LINQ, на самом деле вот почему это было создано.

Я предполагаю, что одна причина анонимного типа за пределами linq состоит в том, чтобы создать временный подобный структуре объект, например:

var x = new { a = 1, b = 2 };

Это может сделать Вашу жизнь немного легче в некоторых ситуациях.

2
ответ дан 18 December 2019 в 07:57
поделиться

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

Некоторая информация может быть найдена здесь: http://www.aaron-powell.com/blog.aspx?id=1247

1
ответ дан 18 December 2019 в 07:57
поделиться
Другие вопросы по тегам:

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