2 using System.Collections.Generic;
4 using System.Text.RegularExpressions;
6 namespace Entitas.Serialization {
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(
'+',
'.');
47 if(_builtInTypesToString.ContainsKey(type.FullName)) {
48 return _builtInTypesToString[type.FullName];
50 if(type.IsGenericType) {
51 var genericMainType = type.FullName.Split(
'`')[0];
52 var genericArguments = type.GetGenericArguments().Select(
53 argType => argType.ToReadableString()
55 return genericMainType +
56 "<" +
string.Join(
", ", genericArguments) +
">";
59 return type.GetElementType().ToReadableString() +
60 "[" +
new string(
',', type.GetArrayRank() - 1) +
"]";
67 public static Type
ToType(
this string typeString) {
68 var fullTypeName = generateTypeString(typeString);
69 var type = Type.GetType(fullTypeName);
74 foreach(var assembly
in AppDomain.CurrentDomain.GetAssemblies()) {
75 type = assembly.GetType(fullTypeName);
84 static string generateTypeString(
string typeString) {
85 if(_builtInTypeStrings.ContainsKey(typeString)) {
86 typeString = _builtInTypeStrings[typeString];
88 typeString = generateGenericArguments(typeString);
89 typeString = generateArray(typeString);
95 static string generateGenericArguments(
string typeString) {
96 const string genericArgsPattern =
@"<(?<arg>.*)>";
97 var separator =
new [] {
", " };
98 typeString = Regex.Replace(typeString, genericArgsPattern,
100 var ts = generateTypeString(m.Groups[
"arg"].Value);
101 var argsCount = ts.Split(separator, StringSplitOptions.None).Length;
103 return "`" + argsCount +
"[" + ts +
"]";
109 static string generateArray(
string typeString) {
110 const string arrayPattern =
@"(?<type>[^\[]*)(?<rank>\[,*\])";
111 typeString = Regex.Replace(typeString, arrayPattern,
113 var type = generateTypeString(m.Groups[
"type"].Value);
114 var rank = m.Groups[
"rank"].Value;
121 static readonly Dictionary<string, string> _builtInTypesToString =
new Dictionary<string, string>() {
122 {
"System.Boolean",
"bool" },
123 {
"System.Byte",
"byte" },
124 {
"System.SByte",
"sbyte" },
125 {
"System.Char",
"char" },
126 {
"System.Decimal",
"decimal" },
127 {
"System.Double",
"double" },
128 {
"System.Single",
"float" },
129 {
"System.Int32",
"int" },
130 {
"System.UInt32",
"uint" },
131 {
"System.Int64",
"long" },
132 {
"System.UInt64",
"ulong" },
133 {
"System.Object",
"object" },
134 {
"System.Int16",
"short" },
135 {
"System.UInt16",
"ushort" },
136 {
"System.String",
"string" },
137 {
"System.Void",
"void" }
140 static readonly Dictionary<string, string> _builtInTypeStrings =
new Dictionary<string, string>() {
141 {
"bool",
"System.Boolean" },
142 {
"byte",
"System.Byte" },
143 {
"sbyte",
"System.SByte" },
144 {
"char",
"System.Char" },
145 {
"decimal",
"System.Decimal" },
146 {
"double",
"System.Double" },
147 {
"float",
"System.Single" },
148 {
"int",
"System.Int32" },
149 {
"uint",
"System.UInt32" },
150 {
"long",
"System.Int64" },
151 {
"ulong",
"System.UInt64" },
152 {
"object",
"System.Object" },
153 {
"short",
"System.Int16" },
154 {
"ushort",
"System.UInt16" },
155 {
"string",
"System.String" },
156 {
"void",
"System.Void" }
static string ToReadableString(this Type type)
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)