Существует ли способ получить псевдоним типа посредством отражения?

Я думаю, что "приложение-приманка" Perl CPAN †¦

Типичные кавычки после просмотра CPAN впервые:

"У Вас есть библиотека для ЧТО ?"
" Искореняют HTML , должно быть лучшее имя функции когда-либо!"
"Вы можете подводить итог текст в Perl?"

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

Тогда можно показать им perldoc и Camel.

19
задан AJ. 1 September 2009 в 14:46
поделиться

4 ответа

Нет - просто создайте Dictionary , чтобы сопоставить все типы с их псевдонимами. Это фиксированный набор, поэтому сделать это несложно:

private static readonly Dictionary<Type, string> Aliases =
    new Dictionary<Type, string>()
{
    { typeof(byte), "byte" },
    { typeof(sbyte), "sbyte" },
    { typeof(short), "short" },
    { typeof(ushort), "ushort" },
    { typeof(int), "int" },
    { typeof(uint), "uint" },
    { typeof(long), "long" },
    { typeof(ulong), "ulong" },
    { typeof(float), "float" },
    { typeof(double), "double" },
    { typeof(decimal), "decimal" },
    { typeof(object), "object" },
    { typeof(bool), "bool" },
    { typeof(char), "char" },
    { typeof(string), "string" },
    { typeof(void), "void" }
};
50
ответ дан 30 November 2019 в 01:47
поделиться

Это не использует отражение, строго говоря, но вы можете получить псевдоним типа, используя CodeDOM:

Type t = column.DataType;    // Int64

string typeName;
using (var provider = new CSharpCodeProvider())
{
    var typeRef = new CodeTypeReference(t);
    typeName = provider.GetTypeOutput(typeRef);
}

Console.WriteLine(typeName);    // long

(Сказав это, я думаю, что другие ответы предполагают, что вы просто использование сопоставления типов CLR с псевдонимами C #, вероятно, лучший способ пойти с этим.)

28
ответ дан 30 November 2019 в 01:47
поделиться

Будьте проще:

var aliasDict = new Dictionary<Type, string>() {
    { typeof(int), "int" },
    { typeof(long), "long" },
    // etc
}

Type reflectedType;
string aliasedTypeName = aliasDict[reflectedType];
2
ответ дан 30 November 2019 в 01:47
поделиться

Я не думаю, что есть. Псевдоним полностью соответствует концепции времени компиляции, специфичной для используемого вами типичного языка .NET. Как только вы отразите и просмотрите тип, вы увидите настоящий .NET-тип объекта.

1
ответ дан 30 November 2019 в 01:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: