2 using System.Collections.Generic;
4 using System.Text.RegularExpressions;
17 if(_builtInTypesToString.ContainsKey(type.FullName)) {
18 return _builtInTypesToString[type.FullName];
20 if(type.IsGenericType) {
21 var genericMainType = type.FullName.Split(
'`')[0];
22 var genericArguments = type.GetGenericArguments().Select(
23 argType => argType.ToCompilableString()
25 return genericMainType +
26 "<" +
string.Join(
", ", genericArguments) +
">";
29 return type.GetElementType().ToCompilableString() +
30 "[" +
new string(
',', type.GetArrayRank() - 1) +
"]";
33 return type.FullName.Replace(
'+',
'.');
40 public static Type
ToType(
this string typeString) {
41 var fullTypeName = generateTypeString(typeString);
42 var type = Type.GetType(fullTypeName);
47 foreach(var assembly
in AppDomain.CurrentDomain.GetAssemblies()) {
48 type = assembly.GetType(fullTypeName);
57 public static string ShortTypeName(
this string fullTypeName) {
58 var split = fullTypeName.Split(
'.');
59 return split[split.Length - 1];
62 public static string RemoveDots(
this string fullTypeName) {
63 return fullTypeName.Replace(
".",
string.Empty);
66 static string generateTypeString(
string typeString) {
67 if(_builtInTypeStrings.ContainsKey(typeString)) {
68 typeString = _builtInTypeStrings[typeString];
70 typeString = generateGenericArguments(typeString);
71 typeString = generateArray(typeString);
77 static string generateGenericArguments(
string typeString) {
78 const string genericArgsPattern =
@"<(?<arg>.*)>";
79 var separator =
new[] {
", " };
80 typeString = Regex.Replace(typeString, genericArgsPattern,
82 var ts = generateTypeString(m.Groups[
"arg"].Value);
83 var argsCount = ts.Split(separator, StringSplitOptions.None).Length;
85 return "`" + argsCount +
"[" + ts +
"]";
91 static string generateArray(
string typeString) {
92 const string arrayPattern =
@"(?<type>[^\[]*)(?<rank>\[,*\])";
93 typeString = Regex.Replace(typeString, arrayPattern,
95 var type = generateTypeString(m.Groups[
"type"].Value);
96 var rank = m.Groups[
"rank"].Value;
103 static readonly Dictionary<string, string> _builtInTypesToString =
new Dictionary<string, string>() {
104 {
"System.Boolean",
"bool" },
105 {
"System.Byte",
"byte" },
106 {
"System.SByte",
"sbyte" },
107 {
"System.Char",
"char" },
108 {
"System.Decimal",
"decimal" },
109 {
"System.Double",
"double" },
110 {
"System.Single",
"float" },
111 {
"System.Int32",
"int" },
112 {
"System.UInt32",
"uint" },
113 {
"System.Int64",
"long" },
114 {
"System.UInt64",
"ulong" },
115 {
"System.Object",
"object" },
116 {
"System.Int16",
"short" },
117 {
"System.UInt16",
"ushort" },
118 {
"System.String",
"string" },
119 {
"System.Void",
"void" }
122 static readonly Dictionary<string, string> _builtInTypeStrings =
new Dictionary<string, string>() {
123 {
"bool",
"System.Boolean" },
124 {
"byte",
"System.Byte" },
125 {
"sbyte",
"System.SByte" },
126 {
"char",
"System.Char" },
127 {
"decimal",
"System.Decimal" },
128 {
"double",
"System.Double" },
129 {
"float",
"System.Single" },
130 {
"int",
"System.Int32" },
131 {
"uint",
"System.UInt32" },
132 {
"long",
"System.Int64" },
133 {
"ulong",
"System.UInt64" },
134 {
"object",
"System.Object" },
135 {
"short",
"System.Int16" },
136 {
"ushort",
"System.UInt16" },
137 {
"string",
"System.String" },
138 {
"void",
"System.Void" }
static Type ToType(this string typeString)
Tries to find and create a type based on the specified type string.
static string ToCompilableString(this Type type)