/// <summary>
/// Given a list of objects, compute the most specific type which they all
/// share,or at worst return sys::Obj. This method does not take into
/// account interfaces, only extends class inheritance.
/// </summary>
public static Type common(object[] objs, int n)
{
if (objs.Length == 0)
{
return(Sys.ObjType.toNullable());
}
bool nullable = false;
Type best = null;
for (int i = 0; i < n; ++i)
{
object obj = objs[i];
if (obj == null)
{
nullable = true; continue;
}
Type t = @typeof(obj);
if (best == null)
{
best = t; continue;
}
while (!t.@is(best))
{
best = best.@base();
if (best == null)
{
return(nullable ? Sys.ObjType.toNullable() : Sys.ObjType);
}
}
}
if (best == null)
{
best = Sys.ObjType;
}
return(nullable ? best.toNullable() : best);
}