private static List <Tuple <ConstructorInfo, string> > ReadTypes(BinaryReader tdbReader) { int count = tdbReader.ReadInt32(); List <Tuple <ConstructorInfo, string> > types = new List <Tuple <ConstructorInfo, string> >(count); for (int i = 0; i < count; ++i) { string typeName = tdbReader.ReadString(); Type t = AssemblyHandler.FindTypeByFullName(typeName); if (t == null) { Console.WriteLine("failed"); if (!Core.Service) { Console.WriteLine("Error: Type '{0}' was not found. Delete all of those types? (y/n)", typeName); if (Console.ReadKey(true).Key == ConsoleKey.Y) { types.Add(null); Console.Write("World: Loading..."); continue; } Console.WriteLine("Types will not be deleted. An exception will be thrown."); } else { Console.WriteLine("Error: Type '{0}' was not found.", typeName); } throw new Exception($"Bad type '{typeName}'"); } ConstructorInfo ctor = t.GetConstructor(m_SerialTypeArray); if (ctor != null) { types.Add(new Tuple <ConstructorInfo, string>(ctor, typeName)); } else { throw new Exception($"Type '{t}' does not have a serialization constructor"); } } return(types); }
private static List <Tuple <ConstructorInfo, string> > ReadTypes <I>(BinaryReader tdbReader) { var constructorTypes = new[] { typeof(I) }; var count = tdbReader.ReadInt32(); var types = new List <Tuple <ConstructorInfo, string> >(count); for (var i = 0; i < count; ++i) { var typeName = tdbReader.ReadString(); var t = AssemblyHandler.FindTypeByFullName(typeName, false); if (t?.IsAbstract != false) { Persistence.WriteConsoleLine("failed"); var issue = t?.IsAbstract == true ? "marked abstract" : "not found"; Persistence.WriteConsoleLine($"Error: Type '{typeName}' was {issue}. Delete all of those types? (y/n)"); if (Console.ReadKey(true).Key == ConsoleKey.Y) { types.Add(null); Persistence.WriteConsole("Loading..."); continue; } Persistence.WriteConsoleLine("Types will not be deleted. An exception will be thrown."); throw new Exception($"Bad type '{typeName}'"); } var ctor = t.GetConstructor(constructorTypes); if (ctor != null) { types.Add(new Tuple <ConstructorInfo, string>(ctor, typeName)); } else { throw new Exception($"Type '{t}' does not have a serialization constructor"); } } return(types); }