Ваш вопрос не совсем понятен: я не уверен, какую форму вы получили для псевдонима C #. Если вы знаете это во время компиляции, вы можете использовать typeof()
как обычно - псевдонимы C # на самом деле просто псевдонимы, поэтому typeof(int) == typeof(System.Int32)
. Существует нет разницы в испускаемом коде.
Если у вас есть строка, например "int"
, просто постройте карту:
Dictionary<string,Type> CSharpAliasToType = new Dictionary<string,Type>
{
{ "string", typeof(string) },
{ "int", typeof(int) },
// etc
};
Получив Type
, вы можете получить полное имя, сборку и т. Д.
Вот пример кода, который учитывает типы, допускающие значения Nullable:
public static Type FromCSharpAlias(string alias)
{
bool nullable = alias.EndsWith("?");
if (nullable)
{
alias = alias.Substring(0, alias.Length - 1);
}
Type type;
if (!CSharpAliasToType.TryGetValue(alias, out type))
{
throw new ArgumentException("No such type");
}
return nullable ? typeof(Nullable<>).MakeGenericType(new Type[]{ type })
: type;
}