438 / 362 / 100
Регистрация: 29.06.2010
Сообщений: 981
Записей в блоге: 1
1

Как определить, что тип анонимный?

14.11.2013, 14:24. Показов 805. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как по типу определить анонимность

C#
1
2
var type =new {id = 5, s = "sss"}.GetType();
type.???
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.11.2013, 14:24
Ответы с готовыми решениями:

Как передать объекты типа (значения класса) в метод и вернуть анонимный тип, чтобы сделать с ним что-нибудь
Всем привет В принципе, просто хочу понять схему, как это возможно (то, что в описании темы)...

Анонимный тип заданного интерфейса
Всем привет. Возможно ли создать анонимный тип, который бы реализовывал некий интерфейс?...

Сконвертировать анонимный тип в список
Доброго времени суток, возник следующий вопрос: "Как узнать и сконвертировать нормально данные,...

Как добавить анонимный тип в объект не на этапе компиляции, а на этапе выполнения программы? Надо для routes.MapRoute
В приложении ASP.NET MVC у меня есть xml файл с маршрутами типа: <route url="Home/{par1}/{par2}"...

6
Эксперт .NET
17684 / 12870 / 3365
Регистрация: 17.09.2011
Сообщений: 21,136
14.11.2013, 15:14 2
Вот, нашел на стэке:
C#
1
2
3
4
5
6
7
8
9
10
11
private static bool CheckIfAnonymousType(Type type)
{
    if (type == null)
        throw new ArgumentNullException("type");
 
    // HACK: The only way to detect anonymous types right now.
    return Attribute.IsDefined(type, typeof(CompilerGeneratedAttribute), false)
        && type.IsGenericType && type.Name.Contains("AnonymousType")
        && (type.Name.StartsWith("<>") || type.Name.StartsWith("VB$"))
        && (type.Attributes & TypeAttributes.NotPublic) == TypeAttributes.NotPublic;
}
1
438 / 362 / 100
Регистрация: 29.06.2010
Сообщений: 981
Записей в блоге: 1
14.11.2013, 15:20  [ТС] 3
Цитата Сообщение от kolorotur Посмотреть сообщение
Вот, нашел на стэке:
Я это тоже видел, просто вопрос в том, что неужели Microsoft ввели такие типы и не добавили свойства проверки, как например свойство проверки "IsDynamic" для Assembly.
0
Эксперт .NET
17684 / 12870 / 3365
Регистрация: 17.09.2011
Сообщений: 21,136
14.11.2013, 15:31 4
Цитата Сообщение от Grishaco Посмотреть сообщение
неужели Microsoft ввели такие типы и не добавили свойства проверки
Эти типы ввели не для того, чтобы на основании аноним/не аноним строить логику приложения, а для того, чтобы облегчить синтаксис.
Переводя на русский: синтаксический сахар.
Для рантайма это такой же класс, как и любой другой.

Цитата Сообщение от Grishaco Посмотреть сообщение
например свойство проверки "IsDynamic" для Assembly
Это ж другое. Там от этого значения зависит поведение сборки.

А какой у вас сценарий изменения логики приложения в зависимости от того, является ли тип анонимным?
0
438 / 362 / 100
Регистрация: 29.06.2010
Сообщений: 981
Записей в блоге: 1
14.11.2013, 15:39  [ТС] 5
Цитата Сообщение от kolorotur Посмотреть сообщение
А какой у вас сценарий изменения логики приложения в зависимости от того, является ли тип анонимным?
В принципе никакого сценария, т.е. знание что тип анонимный или нет мне не важно.

У меня есть WCF сервис, который работает с базой, у него есть методы, которые принимают информацию о типе и в качестве аргументов запроса передается анонимный тип обернутый в object.

Просто стало интересно, как определить по Type, что тип анонимный.
0
145 / 45 / 16
Регистрация: 10.10.2013
Сообщений: 110
14.11.2013, 16:37 6
Цитата Сообщение от Grishaco Посмотреть сообщение
Я это тоже видел, просто вопрос в том, что неужели Microsoft ввели такие типы и не добавили свойства проверки, как например свойство проверки "IsDynamic" для Assembly.
Grishaco, Просто в Microsoft решили что пусть лучше анонимный тип останется анонимным )
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
14.11.2013, 19:17 7
kolorotur, в принципе ничего не мешало им изобрести какой-нибудь атрибут типа [Autogenerated]

Добавлено через 1 минуту
Grishaco, можно объявить как экстеншн
C#
1
2
3
4
5
6
7
8
9
10
11
public static bool IsAnonymous(this Type type)
{
    if (type == null)
        throw new ArgumentNullException("type");
 
    // HACK: The only way to detect anonymous types right now.
    return Attribute.IsDefined(type, typeof(CompilerGeneratedAttribute), false)
        && type.IsGenericType && type.Name.Contains("AnonymousType")
        && (type.Name.StartsWith("<>") || type.Name.StartsWith("VB$"))
        && (type.Attributes & TypeAttributes.NotPublic) == TypeAttributes.NotPublic;
}
а дальше как вы и хотели:
C#
1
2
var type =new {id = 5, s = "sss"}.GetType();
bool anonim = type.IsAnonymous();
Добавлено через 1 минуту
Хах, скначала сказал (про [Autogenerated]), а потом углядел (Attribute.IsDefined(type, typeof(CompilerGeneratedAttribute), false))
0
14.11.2013, 19:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.11.2013, 19:17
Помогаю со студенческими работами здесь

Анонимный тип - это генерация компилятором
A) Структуры, состоящей из свойств B) Класса, состоящего из полей C) Структуры, состоящей из...

Что можно делать с FTP если открыт анонимный доступ? Как удалять или заливать на него файлы ?
подробнее если можно

Как определить тип переменной, ссылающейся на определённый класс? Нужен именно тип, а не ссылка на обьект!
interface HowDefineMyType { void info(); } class A implements HowDefineMyType { ...

Каким методом можно определить, что передаваемый ему тип относится к простым типам?
Есть у меня малюсенькая подзадача в огромном проекте. В ней нужно определить, что тип текущего...

Как обеспечить себе анонимный интернет?
Здравствуйте форумчане. Я впервые на Вашем форуме. Возникла необходимость обеспечить...

Можно ли использовать анонимный метод, как обычный?
Если я в классе объявлю анонимный метод и буду пользоваться им, как обычным, какие плюсы и минусы у...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru