Перетворити назви типу CLR в еквівалентні ідіоматичні псевдоніми C # (наприклад, System.String => string, Int32 => int)

Я аналізую деякі об'єкти, і я хотів би динамічно генерувати деякий код. Справа в тому, що коли я читаю типи, я отримав такі речі:

System.String
System.Int32
Boolean

Я знаю, що це строго ідентично для C# для рядка, int і bool. Але коли я аналізую об'єкт, я отримав версії "System", і я хочу динамічно генерувати деякий код за допомогою рядків, і я хочу створити псевдонім, чи можу я зробити це легко? (без щось схоже на словник, що зв'язує typeofs до рядків ...)

3
Ви не можете це зробити. Те, що ви отримуєте, - фактичні типи, "int", "string" тощо - це не що інше, як псевдоніми.
додано Автор Alex, джерело
ніколи не звертав на це уваги, фіксуючи це!
додано Автор Guillaume Slashy, джерело
що саме ви маєте на увазі під час "розбору деяких об'єктів", покажіть якийсь код!
додано Автор jcvandan, джерело
Я редагував ваше ім'я, щоб уникнути плутанини, тому що "перетворення типу" - це зовсім інша справа.
додано Автор AakashM, джерело
@James ooh, meta.stackexchange.com/questions/99812/… , то я думаю
додано Автор AakashM, джерело

3 Відповіді

Я не знаю, як це зробити. Тим не менш, існує не так багато типів, тому, якщо це був я, я, мабуть, просто написав функцію відображення.

Тут ви можете знайти список назв типів C# як відправну точку:

http://msdn.microsoft.com/en-us/ бібліотека/86792hfa (VS.71). Aspx

Update: here is a reference for C# which includes decimal. Not sure why that was missing from above link: http://msdn.microsoft.com/en-us/library/ya5y69ds.aspx

3
додано
Як не дивно, у цій таблиці відсутній "десятковий". Входить до таблиць, на які посилаються інші два відповіді.
додано Автор RenniePet, джерело

Строки та int є псевдонімами для System.String та System.Int32.

Seems like you can use this to get the Types from strings: http://msdn.microsoft.com/en-us/library/system.codedom.codetypeofexpression.aspx

// Creates a reference to the System.Int32 type.
CodeTypeReference int32typeRef = new CodeTypeReference("System.Int32");

But there is no way to get a string from type so you have to define your own mapping there: Is there a way to get a type's alias through reflection?

1
додано
Я хотів уникнути цього, і я створив асоціацію, що описує себе :(
додано Автор Guillaume Slashy, джерело
і я можу отримати рядок з "dateTimeTypeRef" і "int32typeRef"? Я спробував toString (), але я отримав: System.CodeDom.CodeTypeReference
додано Автор Guillaume Slashy, джерело
Ні, ви не можете :( stackoverflow.com/questions/1362884/…
додано Автор luqi, джерело

Після того як ви скомпілюєте код, який ви пишете в C#, він більше не знає, що він отриманий з коду C#, тому неможливо автоматично отримати псевдонім C#, не виконуючи саме те, що ви пропонуєте - створити простий картографічний словник.

The built in C# types are listed here: http://msdn.microsoft.com/en-US/library/ya5y69ds.aspx

Цей список не буде змінюватися в будь-який час скоро, тому що я не повинен турбуватися про жорстке кодування цього списку у вашу заявку.

1
додано
var chat = new Chat();
var chat = new Chat();
642 учасників

Обсуждение вопросов по C# / .NET / .NET Core / .NET Standard / Azure Сообщества-организаторы: — @itkpi — @dncuug