public static IType GetElementType(CSharpAstResolver resolver, IType type)
{
// TODO: A better get element type method.
if (type.Kind == TypeKind.Array || type.Kind == TypeKind.Dynamic) {
if (type.Kind == TypeKind.Array)
return ((ArrayType)type).ElementType;
return resolver.Compilation.FindType(KnownTypeCode.Object);
}
foreach (var method in type.GetMethods (m => m.Name == "GetEnumerator")) {
IType returnType = null;
foreach (var prop in method.ReturnType.GetProperties(p => p.Name == "Current")) {
if (returnType != null && prop.ReturnType.IsKnownType (KnownTypeCode.Object))
continue;
returnType = prop.ReturnType;
}
if (returnType != null)
return returnType;
}
return resolver.Compilation.FindType(KnownTypeCode.Object);
}