Skip to content

Commit 4a9f5db

Browse files
Add IsArrayInterfaceType extension method
1 parent 8d7913b commit 4a9f5db

File tree

2 files changed

+19
-19
lines changed

2 files changed

+19
-19
lines changed

ICSharpCode.Decompiler/CSharp/Resolver/TypeInference.cs

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -759,7 +759,7 @@ void MakeLowerBoundInference(IType U, IType V)
759759
MakeLowerBoundInference(arrU.ElementType, arrV.ElementType);
760760
return;
761761
}
762-
else if (arrU != null && IsGenericInterfaceImplementedByArray(pV) && arrU.Dimensions == 1)
762+
else if (arrU != null && pV.IsArrayInterfaceType() && arrU.Dimensions == 1)
763763
{
764764
MakeLowerBoundInference(arrU.ElementType, pV.GetTypeArgument(0));
765765
return;
@@ -829,23 +829,6 @@ void MakeLowerBoundInference(IType U, IType V)
829829
return;
830830
}
831831
}
832-
833-
static bool IsGenericInterfaceImplementedByArray(ParameterizedType rt)
834-
{
835-
if (rt == null || rt.TypeParameterCount != 1)
836-
return false;
837-
switch (rt.GetDefinition()?.KnownTypeCode)
838-
{
839-
case KnownTypeCode.IEnumerableOfT:
840-
case KnownTypeCode.ICollectionOfT:
841-
case KnownTypeCode.IListOfT:
842-
case KnownTypeCode.IReadOnlyCollectionOfT:
843-
case KnownTypeCode.IReadOnlyListOfT:
844-
return true;
845-
default:
846-
return false;
847-
}
848-
}
849832
#endregion
850833

851834
#region MakeUpperBoundInference (§7.5.2.10)
@@ -880,7 +863,7 @@ void MakeUpperBoundInference(IType U, IType V)
880863
MakeUpperBoundInference(arrU.ElementType, arrV.ElementType);
881864
return;
882865
}
883-
else if (arrV != null && IsGenericInterfaceImplementedByArray(pU) && arrV.Dimensions == 1)
866+
else if (arrV != null && pU.IsArrayInterfaceType() && arrV.Dimensions == 1)
884867
{
885868
MakeUpperBoundInference(pU.GetTypeArgument(0), arrV.ElementType);
886869
return;

ICSharpCode.Decompiler/TypeSystem/TypeSystemExtensions.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,23 @@ bool IsUnmanagedTypeInternal(IType type)
306306
}
307307
}
308308

309+
public static bool IsArrayInterfaceType(this IType type)
310+
{
311+
if (type == null || type.TypeParameterCount != 1)
312+
return false;
313+
switch (type.GetDefinition()?.KnownTypeCode)
314+
{
315+
case KnownTypeCode.IEnumerableOfT:
316+
case KnownTypeCode.ICollectionOfT:
317+
case KnownTypeCode.IListOfT:
318+
case KnownTypeCode.IReadOnlyCollectionOfT:
319+
case KnownTypeCode.IReadOnlyListOfT:
320+
return true;
321+
default:
322+
return false;
323+
}
324+
}
325+
309326
public static bool IsInlineArrayType(this IType type)
310327
{
311328
if (type.Kind != TypeKind.Struct)

0 commit comments

Comments
 (0)