2010-07-02 4 views
3

Когда вы получаете тип переменной, вы можете проверить его имя:Где указаны имена типов?

if (my_type.Name=="Int32") 

однако было бы более элегантно писать

if (my_type.Name==TypeNames.Int32) 

, чтобы избежать опечаток. Я могу определить такой класс самостоятельно, но, возможно, где-то есть определение?

Если да, то где?


Примечание: пожалуйста, не интересно «почему вы хотели бы получить тип переменной в первую очередь», «лучше использовать" это»и так. Большое спасибо!


Редактировать: между тем, я прыгнул в заключение было бы достаточно, чтобы игнорировать тип объекта (переменной my_type) и проверить объект вместо этого. Другими словами, my_type не требуется. Я забыл о нулевой случае :-(Меньше кода, больше сна, это то, что мне нужно ;-)

+6

Почему бы вам не проверить тип? if (my_type == typeof (int)) – Arseny

+2

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

+0

@macias, как получилось? оба из них GetType и typeof return Type, которые вы можете сравнить. – Arseny

ответ

16

Попробуйте следующее

typeof(Int32).Name 

Если вы хотите сравнить типы, хотя делать это по имени не лучший как это будет неправильно во многих случаях. Правильнее сравнивать типы напрямую.

if (m_type == typeof(Int32)) { 
    ... 
} 
+0

Я отметил вас как ответ на свой вопрос, потому что это очень приятно, но просто из любопытства я все еще заинтересован в получении «реального» ответа на мой вопрос. Еще раз спасибо. – greenoldman

+1

@macias: Простой ответ на ваш точный вопрос: «Нет, такого класса нет, потому что этого не должно быть». –

+1

Но это * - это реальный ответ на ваш вопрос ... Q: «Где указаны имена типов?» A: «В свойстве Type.Name» –

2

Имена типов не определены нигде в классе. Они генерируются во время выполнения CLR (вызовом внешней функции ConstructName) с использованием отражения.

Использование предложения JaredPar будет выполнять эту работу.

+1

Они где-то хранятся: в метаданных сборки. Способ доступа к этим метаданным осуществляется через класс «Тип». –

+0

@ Тим Робинсон: Наверняка, они должны где-то быть где-то сохранены. Мне не хватало некоторых существенных бит ... пока еще недостаточно кофе ;-) –

Смежные вопросы