BTDB.EventStoreLayer.ListTypeDescriptor.GetPreferedType C# (CSharp) Метод

GetPreferedType() публичный Метод

public GetPreferedType ( ) : Type
Результат System.Type
        public Type GetPreferedType()
        {
            if (_type == null)
            {
                _itemType = _typeSerializers.LoadAsType(_itemDescriptor);
                _type = typeof(IList<>).MakeGenericType(_itemType);
            }
            return _type;
        }

Same methods

ListTypeDescriptor::GetPreferedType ( Type targetType ) : Type

Usage Example

Пример #1
0
            public void GenerateTypeIterator(IILGen ilGenerator, Action <IILGen> pushObj, Action <IILGen> pushCtx, Type type)
            {
                var finish = ilGenerator.DefineLabel();
                var next   = ilGenerator.DefineLabel();

                if (type == typeof(object))
                {
                    type = _listTypeDescriptor.GetPreferedType();
                }
                var targetIList         = type.GetInterface("IList`1") ?? type;
                var targetTypeArguments = targetIList.GetGenericArguments();
                var itemType            = _listTypeDescriptor._typeSerializers.LoadAsType(_listTypeDescriptor._itemDescriptor, targetTypeArguments[0]);

                var localList  = ilGenerator.DeclareLocal(typeof(IList <>).MakeGenericType(itemType));
                var localIndex = ilGenerator.DeclareLocal(typeof(int));
                var localCount = ilGenerator.DeclareLocal(typeof(int));

                ilGenerator
                .Do(pushObj)
                .Castclass(localList.LocalType)
                .Stloc(localList)
                .Ldloc(localList)
                .Callvirt(localList.LocalType.GetInterface("ICollection`1").GetProperty("Count").GetGetMethod())
                .Stloc(localCount)
                .LdcI4(0)
                .Stloc(localIndex)
                .Mark(next)
                .Ldloc(localIndex)
                .Ldloc(localCount)
                .BgeUn(finish)
                .Do(pushCtx)
                .Ldloc(localList)
                .Ldloc(localIndex)
                .Callvirt(localList.LocalType.GetMethod("get_Item"))
                .Callvirt(() => default(IDescriptorSerializerLiteContext).StoreNewDescriptors(null))
                .Ldloc(localIndex)
                .LdcI4(1)
                .Add()
                .Stloc(localIndex)
                .Br(next)
                .Mark(finish);
            }