Как стать автором
Обновить

Анонимные типы за пределами функции

Время на прочтение2 мин
Количество просмотров12K
Анонимные типы — очень приятное расширение C#, появившееся в версии 3.0. С помощью анонимных типов мы можем налету создать объект-хранилище и наполнить его данными.
Основное применение анонимных типов — это, конечно, LINQ. Фактически, они и были созданы для него (вообще говоря, все нововведения C# 3.0 были сделаны для LINQ, за исключением, пожалуй, частичных методов).
var o = new {Bar=2, Foo="string"};


Однако, мы не сможем использоваь этот объект вне метода, в котором он был объявлен и проинициализирован:
??? GetFullName()
{
  return new {Name="Иван", Surname="Иванов"};
}

object PrintFullName()
{
  var fullname = GetFullName() as ???;
}


Фактически, мы не знаем, какой тип нужно использовать вместо ???.. Однако есть еще один, не совсем очевидный способ использования анонимных типов — в качестве ключей для Dictionary:
Dictionary<object, string> dict = new Dictionary<object, string>();
public void Add()
{
   dict.Add(new {x=5, y=6}, "test");
}
      
public void Get(){
   Console.WriteLine(dict[new{x=5, y=6}]);
}
* This source code was highlighted with Source Code Highlighter.

Это становится возможным благодаря тому, что сгенерированные компилятором оболочки для анонимных типов реализуют методы Equals() и GetHashCode(). Правда, остается та же проблема — мы не сможем получить значения из такого ключа, потому как опять не сможем явно указать его тип, поэтому использования ключа ограничивается только методами Get(), Set() и ContainsKey().
Итак, если вам необходимо организовать хранение данных в Dictionary по сложному ключу, состоящему из нескольких полей, и вам не нужно получать значения этого ключа — смело используете анонимные типы.
Теги:
Хабы:
Всего голосов 35: ↑26 и ↓9+17
Комментарии31

Публикации

Истории

Работа

.NET разработчик
80 вакансий

Ближайшие события

27 августа – 7 октября
Премия digital-кейсов «Проксима»
МоскваОнлайн
24 сентября
Конференция Fin.Bot 2024
МоскваОнлайн
24 сентября
Astra DevConf 2024
МоскваОнлайн
25 сентября
Конференция Yandex Scale 2024
МоскваОнлайн
28 – 29 сентября
Конференция E-CODE
МоскваОнлайн
28 сентября – 5 октября
О! Хакатон
Онлайн
30 сентября – 1 октября
Конференция фронтенд-разработчиков FrontendConf 2024
МоскваОнлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн