diff --git a/GBase/Helpers/Enumerables.cs b/GBase/Helpers/Enumerables.cs index 1c4bc06..cf9563d 100644 --- a/GBase/Helpers/Enumerables.cs +++ b/GBase/Helpers/Enumerables.cs @@ -6,6 +6,7 @@ using System; using System.Collections; using System.Collections.Generic; using System.Linq; +using System.Reflection; using System.Text; using GBase.Exceptions; using GBase.Interfaces; @@ -26,7 +27,10 @@ namespace GBase.Helpers StringBuilder @string = new StringBuilder(); foreach (var item in enumerable) { - @string.Append($"{item}{ENUMERABLE_STRING_DIVIDER}"); + if (item is IGBaseObject gBaseObject) + @string.Append($"{gBaseObject.Key}{ENUMERABLE_STRING_DIVIDER}"); + else + @string.Append($"{item}{ENUMERABLE_STRING_DIVIDER}"); } char lastChar = @string[^1]; @@ -41,9 +45,10 @@ namespace GBase.Helpers /// /// The /// The given + /// /// An of /// Interface was passed to an - public static TEnumerable ConvertToGBaseEnumerable(string @string) + public static TEnumerable ConvertToGBaseEnumerable(string @string, IGBase gBase) { //get generic type parameter of TEnumerable Type genericType = typeof(TEnumerable).GetGenericArguments()[0]; @@ -61,9 +66,16 @@ namespace GBase.Helpers if (genericType.IsInterface) throw new InterfaceEnumerablePassedException(genericType); - IGBaseObject gBaseObject = (IGBaseObject) Activator.CreateInstance(genericType); - gBaseObject.InitializeFromString(value); - item = gBaseObject; + if (!int.TryParse(value, out int key)) + throw new InvalidKeyException("Key is not an integer."); + + //TODO: What to do when this table isn't initialized yet? + item = GenericMethodCaller.Call(gBase, nameof(IGBase.GetEntryForKey), + BindingFlags.Public | BindingFlags.Instance, genericType, key); + + // IGBaseObject gBaseObject = (IGBaseObject) Activator.CreateInstance(genericType); + // gBaseObject.InitializeFromString(value); + // item = gBaseObject; } else item = Convert.ChangeType(value, genericType);