- use keys to convert a gBase string back to an enumerable

master
Simon G 5 years ago
parent 9a058caade
commit b14099fb25
  1. 20
      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,6 +27,9 @@ namespace GBase.Helpers
StringBuilder @string = new StringBuilder();
foreach (var item in enumerable)
{
if (item is IGBaseObject gBaseObject)
@string.Append($"{gBaseObject.Key}{ENUMERABLE_STRING_DIVIDER}");
else
@string.Append($"{item}{ENUMERABLE_STRING_DIVIDER}");
}
@ -41,9 +45,10 @@ namespace GBase.Helpers
/// </summary>
/// <typeparam name="TEnumerable">The <see cref="IEnumerable{T}"/> <see cref="Type"/></typeparam>
/// <param name="string">The given <see cref="string"/></param>
/// <param name="gBase"></param>
/// <returns>An <see cref="IEnumerable{T}"/> of <see cref="Type"/> <typeparamref name="TEnumerable"/></returns>
/// <exception cref="InterfaceEnumerablePassedException">Interface was passed to an <see cref="IEnumerable{T}"/></exception>
public static TEnumerable ConvertToGBaseEnumerable<TEnumerable>(string @string)
public static TEnumerable ConvertToGBaseEnumerable<TEnumerable>(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);

Loading…
Cancel
Save