Википедия имеет это для высказывания о различиях.
В общем JScript язык сценариев ActiveX, который, вероятно, интерпретируется как JavaScript браузерами неIE.
Из Блог Мэтта Уоррена :
internal static class TypeSystem {
internal static Type GetElementType(Type seqType) {
Type ienum = FindIEnumerable(seqType);
if (ienum == null) return seqType;
return ienum.GetGenericArguments()[0];
}
private static Type FindIEnumerable(Type seqType) {
if (seqType == null || seqType == typeof(string))
return null;
if (seqType.IsArray)
return typeof(IEnumerable<>).MakeGenericType(seqType.GetElementType());
if (seqType.IsGenericType) {
foreach (Type arg in seqType.GetGenericArguments()) {
Type ienum = typeof(IEnumerable<>).MakeGenericType(arg);
if (ienum.IsAssignableFrom(seqType)) {
return ienum;
}
}
}
Type[] ifaces = seqType.GetInterfaces();
if (ifaces != null && ifaces.Length > 0) {
foreach (Type iface in ifaces) {
Type ienum = FindIEnumerable(iface);
if (ienum != null) return ienum;
}
}
if (seqType.BaseType != null && seqType.BaseType != typeof(object)) {
return FindIEnumerable(seqType.BaseType);
}
return null;
}
}
Type t = null
foreach(object o in list)
{
o.GetType();
}
даст вам тип объекта.
Тогда вам, вероятно, следует проверить желаемые типы:
if(t == typeof(myClass))
{
dosomething();
}
else if (t == typeof(myOtherClass))
{
dosomethingelse();
}
myCollection.GetType().GetGenericArguments()
вернет массив типа args.
Вы не можете просто использовать t.GetType () для этого.
Почему бы вместо этого просто не реализовать IEnumerable
? Например:
public void MyFunc
Кроме этого, вам лучше проверить тип каждого отдельного объекта, используя is
или .GetType
вместо того, чтобы пытаться решить это из самого контейнера.
Если это не вариант, и вам действительно нужно знать тип базового контейнера, который вам в основном придется проверить с помощью , это
, чтобы узнать, какие интерфейсы он реализует (например, IList
и т. Д.). Скорее всего, тип вашего массива будет универсальным, что означает, что попытка вернуться к его названию и типу данных будет довольно беспорядочной.