ICSharpCode.NRefactory.CSharp.TypeGuessing.GetElementType C# (CSharp) Method

GetElementType() public static method

public static GetElementType ( ICSharpCode.NRefactory.CSharp.Resolver.CSharpAstResolver resolver, IType type ) : IType
resolver ICSharpCode.NRefactory.CSharp.Resolver.CSharpAstResolver
type IType
return IType
		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);
		}