Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ GetCollectionElementType()

Type System.Runtime.Serialization.CollectionDataContract.CollectionDataContractCriticalHelper.GetCollectionElementType ( )
inlinepackage

Definition at line 549 of file CollectionDataContract.cs.

550 {
551 Type type = null;
552 if (Kind != CollectionKind.GenericDictionary)
553 {
554 type = ((Kind != CollectionKind.Dictionary) ? GetEnumeratorMethod.ReturnType : Globals.TypeOfDictionaryEnumerator);
555 }
556 else
557 {
558 Type[] genericArguments = ItemType.GetGenericArguments();
559 type = Globals.TypeOfGenericDictionaryEnumerator.MakeGenericType(genericArguments);
560 }
561 MethodInfo methodInfo = type.GetMethod("get_Current", BindingFlags.Instance | BindingFlags.Public, Type.EmptyTypes);
562 if (methodInfo == null)
563 {
564 if (type.IsInterface)
565 {
566 methodInfo = XmlFormatGeneratorStatics.GetCurrentMethod;
567 }
568 else
569 {
570 Type interfaceType = Globals.TypeOfIEnumerator;
571 if (Kind == CollectionKind.GenericDictionary || Kind == CollectionKind.GenericCollection || Kind == CollectionKind.GenericEnumerable)
572 {
573 Type[] interfaces = type.GetInterfaces();
574 Type[] array = interfaces;
575 foreach (Type type2 in array)
576 {
577 if (type2.IsGenericType && type2.GetGenericTypeDefinition() == Globals.TypeOfIEnumeratorGeneric && type2.GetGenericArguments()[0] == ItemType)
578 {
580 break;
581 }
582 }
583 }
585 }
586 }
587 return methodInfo.ReturnType;
588 }
static MethodInfo GetTargetMethodWithName(string name, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] Type type, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods)] Type interfaceType)

References System.array, System.Runtime.Serialization.Dictionary, System.Type.EmptyTypes, System.Runtime.Serialization.XmlFormatGeneratorStatics.GetCurrentMethod, System.Runtime.Serialization.CollectionDataContract.CollectionDataContractCriticalHelper.GetEnumeratorMethod, System.Type.GetInterfaces(), System.Runtime.Serialization.CollectionDataContract.GetTargetMethodWithName(), System.Runtime.Serialization.CollectionDataContract.CollectionDataContractCriticalHelper.ItemType, System.Runtime.Serialization.CollectionDataContract.CollectionDataContractCriticalHelper.Kind, System.Reflection.MethodInfo.ReturnType, System.type, System.Runtime.Serialization.Globals.TypeOfDictionaryEnumerator, System.Runtime.Serialization.Globals.TypeOfGenericDictionaryEnumerator, and System.Runtime.Serialization.Globals.TypeOfIEnumerator.

Referenced by System.Runtime.Serialization.CollectionDataContract.GetCollectionElementType().