From ef62e30c6f3907ebfee4bc2cb91ce180eaa77524 Mon Sep 17 00:00:00 2001 From: Robert Date: Tue, 13 Oct 2020 19:54:31 +0200 Subject: [PATCH] Data model - Fixed IEnumerable detection for strings and... IEnumerables --- src/Artemis.Core/Extensions/TypeExtensions.cs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/Artemis.Core/Extensions/TypeExtensions.cs b/src/Artemis.Core/Extensions/TypeExtensions.cs index 7878bc5a6..223874f44 100644 --- a/src/Artemis.Core/Extensions/TypeExtensions.cs +++ b/src/Artemis.Core/Extensions/TypeExtensions.cs @@ -100,6 +100,13 @@ namespace Artemis.Core /// public static bool IsGenericEnumerable(this Type type) { + // String is an IEnumerable to be fair, but not for us + if (type == typeof(string)) + return false; + // It may actually be one instead of implementing one ;) + if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(IEnumerable<>)) + return true; + return type.GetInterfaces().Any(x => x.IsGenericType && x.GetGenericTypeDefinition() == typeof(IEnumerable<>)); @@ -110,6 +117,10 @@ namespace Artemis.Core /// public static Type? GetGenericEnumerableType(this Type type) { + // It may actually be one instead of implementing one ;) + if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(IEnumerable<>)) + return type.GenericTypeArguments[0]; + Type enumerableType = type.GetInterfaces().FirstOrDefault(x => x.IsGenericType && x.GetGenericTypeDefinition() == typeof(IEnumerable<>));