Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
53 / 53 / 10
Регистрация: 26.09.2013
Сообщений: 277

Анонимные типы - определение и назначение

14.08.2014, 15:41. Показов 2472. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
изучаю эту тему,и возникло несколько вопросов
1. Не могу найти нормального определения анонимных типов.
2. не совсем понимаю их преимущества, предназначение,область применения.
3. можно организовать вывод при каком -то условии? почему при выводе, кроме значений выводиться различные скобки?

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
class Program
    {
        static void Main(string[] args)
        {
            var Students = new[]
            {
                new {Name = "A", Age = 20},
                new {Name = "B", Age = 17},
                new {Name = "C", Age = 18},
                new {Name = "D", Age = 21},
                new {Name = "E", Age = 29}
            };
           
            //var display = from prod in Students
            //              where prod.Age>=20
            //              select Students;
            
            foreach (var x in Students)
            {
                Console.WriteLine(x);
            }
            Console.WriteLine();
            
        }
    }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.08.2014, 15:41
Ответы с готовыми решениями:

Вложенные анонимные типы?
Всем привет, имеется вот такой пример: class Program { static void Main() { var instance = new {...

Анонимные типы в c# и их особенности?
Всем привет. Начал изучать анонимные типы в c#. Автор приводит пример синтаксиса Анонимного типа var instance=new{Name"Alex",...

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

9
871 / 721 / 304
Регистрация: 15.04.2013
Сообщений: 2,047
Записей в блоге: 5
14.08.2014, 15:57
tranquil,
1) На MSDN понятные определения http://msdn.microsoft.com/en-u... 97696.aspx
2) Они были разработаны для применения в запросах (LINQ)
3) Такой у них ToString, из-за этого и вывод такой.
1
Life Builder
 Аватар для sk007
531 / 496 / 374
Регистрация: 12.01.2011
Сообщений: 1,755
14.08.2014, 15:59
Вот так можно сделать поиск по возрасту
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
            var Students = new[]
            {
                new {Name = "A", Age = 20},
                new {Name = "B", Age = 17},
                new {Name = "C", Age = 18},
                new {Name = "D", Age = 21},
                new {Name = "E", Age = 29}
            };
 
            foreach (var x in Students.Where(x=>x.Age>=20))
            {
                Console.WriteLine("{0} - {1}", x.Name, x.Age);
            }
            Console.ReadKey();
2
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
14.08.2014, 16:00
Лучший ответ Сообщение было отмечено tranquil как решение

Решение

tranquil, анонимный тип автоматически создает класс-наследник object.
в вашем случае он выглядит приблизительно так
C#
1
2
3
4
5
6
7
8
9
class MyClass
{
    public  string Name{get;set;}
    public int Age{get;set;}
    public override ToString()
    {
          return string.Format("{ Name = {0}, Age = {1}", Name, Age);
    }
}
их применение неоценимо при использовании Linq.
Напр. у нас есть класс Student(Имя, группа, их оценки) и список студетов List<Student> studentlist
Пусть необходимо выбрать студентов определенной группы и получить их средний бал.
тогда нам необходимо создать новый класс имя студента-средний бал, но мы можем использовать анонимный тип:
C#
1
2
3
4
5
var res = studentlist.Where(w=>w.Group == groupNumber)
.Select(s=> new {
Name = s.Name,
point = s.Points.Average(a=>a)
});
чтоб вывести в удобном для вам виде используйте строку форматирования:
C#
1
Console.WriteLine("Студент {0}. Успеваемость:  {1}", x.Name, x.point);
1
53 / 53 / 10
Регистрация: 26.09.2013
Сообщений: 277
14.08.2014, 16:11  [ТС]
Цитата Сообщение от XRoy Посмотреть сообщение
1) На MSDN понятные определения http://msdn.microsoft.com/en-u... 97696.aspx
видел, более-имения понятно,но не совсем
Цитата Сообщение от XRoy Посмотреть сообщение
2) Они были разработаны для применения в запросах (LINQ)
это читал,примеров и как именно применяются не нашел.
0
871 / 721 / 304
Регистрация: 15.04.2013
Сообщений: 2,047
Записей в блоге: 5
14.08.2014, 16:16
Лучший ответ Сообщение было отмечено tranquil как решение

Решение

tranquil,
К примеру сопоставить возраст и город по имени
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
 var studentsCity = new[]
            {
                new {Name = "A", City = "Moscow"},
                new {Name = "B", City = "St.Petersburg"},
                new {Name = "C", City = "Moscow"},
                new {Name = "D", City = "Omsk"},
                new {Name = "E", City = "Moscow"}
            };
 
            var students = new[]
            {
                new {Name = "A", Age = 20},
                new {Name = "B", Age = 17},
                new {Name = "C", Age = 18},
                new {Name = "D", Age = 21},
                new {Name = "E", Age = 29}
            };
 
            var res = students.SelectMany(stud => studentsCity, (stud, city) => new {stud, city})
                .Where(x => x.stud.Name == x.city.Name)
                .Select(x => new {Name = x.stud.Name, Age = x.stud.Age, City = x.city.City});
 
            foreach (var x in res)
            {
                Console.WriteLine(x.ToString());
            }
Добавлено через 50 секунд
Вывод будет таким
Code
1
2
3
4
5
{ Name = A, Age = 20, City = Moscow }
{ Name = B, Age = 17, City = St.Petersburg }
{ Name = C, Age = 18, City = Moscow }
{ Name = D, Age = 21, City = Omsk }
{ Name = E, Age = 29, City = Moscow }
1
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
14.08.2014, 16:37
XRoy, в вашем примере лучше использовать Join:
C#
1
var res = students.Join(studentsCity, i=>i.Name, o=>o.Name, (i,o)=> new {i.Name, i.Age, CityName = o.City});
0
871 / 721 / 304
Регистрация: 15.04.2013
Сообщений: 2,047
Записей в блоге: 5
14.08.2014, 16:42
Learx,
Вы правы, но с join не так хорошо раскрываются анонимные типы.
0
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
14.08.2014, 16:56
XRoy, я имел ввиду построение LINQ запроса для данной задачи будет эффективнее.
0
158 / 187 / 48
Регистрация: 25.11.2013
Сообщений: 978
14.08.2014, 20:37
Цитата Сообщение от tranquil Посмотреть сообщение
1. Не могу найти нормального определения анонимных типов.
2. не совсем понимаю их преимущества, предназначение,область применения.
3. можно организовать вывод при каком -то условии? почему при выводе, кроме значений выводиться различные скобки?
1. http://msdn.microsoft.com/ru-r... 97696.aspx
2. Преимуществ нет, сплошные недостатки
3. Работа с ат ничем не отличается от других типов
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.08.2014, 20:37
Помогаю со студенческими работами здесь

Определение и назначение положения скролла при обновлении ListView
Нужно запомнить положение скролла с последующим присвоении полученного значения при обновлении ListView. При чем запоминать нужно не по...

Написать функцию StrType (s). Назначение – определение типа строки s
Помогите, пожалуйста, со следующим заданием: Написать функцию StrType (s). Назначение – определение типа строки s (возможные типы –...

32.Модуль в Паскале (Unit), его назначение, структура модуля, назначение и описание частей модуля
32.Модуль в Паскале (Unit), его назначение, структура модуля, назначение и описание частей модуля.

Анонимные сообщения
Хотел бы сделать на сайте как бы стену мнений. Но так, что бы человек вводил только ник. Помогите с этим разобраться)

Анонимные сообщения
Как реализовать скрипт ответа, через цыкл вытаскиваю ответы, проверяет имеет ли сообщение значения 0, если да выводит, нужно чтобы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru