Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / ndp / clr / src / BCL / System / Runtime / Serialization / SerializationInfoEnumerator.cs / 1 / SerializationInfoEnumerator.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== /*============================================================ ** ** Class: SerializationInfoEnumerator ** ** ** Purpose: A formatter-friendly mechanism for walking all of ** the data in a SerializationInfo. Follows the IEnumerator ** mechanism from Collections. ** ** ============================================================*/ namespace System.Runtime.Serialization { using System; using System.Collections; // // The tuple returned by SerializationInfoEnumerator.Current. // [System.Runtime.InteropServices.ComVisible(true)] public struct SerializationEntry { private Type m_type; private Object m_value; private String m_name; public Object Value { get { return m_value; } } public String Name { get { return m_name; } } public Type ObjectType { get { return m_type; } } internal SerializationEntry(String entryName, Object entryValue, Type entryType) { m_value = entryValue; m_name = entryName; m_type = entryType; } } // // A simple enumerator over the values stored in the SerializationInfo. // This does not snapshot the values, it just keeps pointers to the // member variables of the SerializationInfo that created it. // [System.Runtime.InteropServices.ComVisible(true)] public sealed class SerializationInfoEnumerator : IEnumerator { String[] m_members; Object[] m_data; Type[] m_types; int m_numItems; int m_currItem; bool m_current; internal SerializationInfoEnumerator(String[] members, Object[] info, Type[] types, int numItems) { BCLDebug.Assert(members!=null, "[SerializationInfoEnumerator.ctor]members!=null"); BCLDebug.Assert(info!=null, "[SerializationInfoEnumerator.ctor]info!=null"); BCLDebug.Assert(types!=null, "[SerializationInfoEnumerator.ctor]types!=null"); BCLDebug.Assert(numItems>=0, "[SerializationInfoEnumerator.ctor]numItems>=0"); BCLDebug.Assert(members.Length>=numItems, "[SerializationInfoEnumerator.ctor]members.Length>=numItems"); BCLDebug.Assert(info.Length>=numItems, "[SerializationInfoEnumerator.ctor]info.Length>=numItems"); BCLDebug.Assert(types.Length>=numItems, "[SerializationInfoEnumerator.ctor]types.Length>=numItems"); m_members = members; m_data = info; m_types = types; //The MoveNext semantic is much easier if we enforce that [0..m_numItems] are valid entries //in the enumerator, hence we subtract 1. m_numItems = numItems-1; m_currItem = -1; m_current = false; } public bool MoveNext() { if (m_currItemObject IEnumerator.Current { //Actually returns a SerializationEntry get { if (m_current==false) { throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_EnumOpCantHappen")); } return (Object)(new SerializationEntry(m_members[m_currItem], m_data[m_currItem], m_types[m_currItem])); } } public SerializationEntry Current { //Actually returns a SerializationEntry get { if (m_current==false) { throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_EnumOpCantHappen")); } return (new SerializationEntry(m_members[m_currItem], m_data[m_currItem], m_types[m_currItem])); } } public void Reset() { m_currItem = -1; m_current = false; } public String Name { get { if (m_current==false) { throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_EnumOpCantHappen")); } return m_members[m_currItem]; } } public Object Value { get { if (m_current==false) { throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_EnumOpCantHappen")); } return m_data[m_currItem]; } } public Type ObjectType { get { if (m_current==false) { throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_EnumOpCantHappen")); } return m_types[m_currItem]; } } } }
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ITreeGenerator.cs
- MouseOverProperty.cs
- DataGridViewColumnConverter.cs
- RuntimeResourceSet.cs
- StickyNoteContentControl.cs
- DesignerOptionService.cs
- FixedHighlight.cs
- RootBrowserWindow.cs
- CalendarDateRange.cs
- ServicePointManagerElement.cs
- DetailsViewPagerRow.cs
- QueryCacheEntry.cs
- Imaging.cs
- ComplexLine.cs
- _UriSyntax.cs
- StateManagedCollection.cs
- TabOrder.cs
- Journal.cs
- TemplatePagerField.cs
- MultiView.cs
- ForEachAction.cs
- Typography.cs
- ConfigDefinitionUpdates.cs
- TypedOperationInfo.cs
- IdentitySection.cs
- InternalMappingException.cs
- PasswordRecoveryAutoFormat.cs
- AnonymousIdentificationSection.cs
- HwndAppCommandInputProvider.cs
- QueryPageSettingsEventArgs.cs
- DataTableCollection.cs
- ImageMap.cs
- TargetControlTypeAttribute.cs
- ServerReliableChannelBinder.cs
- WebPartDescriptionCollection.cs
- ToolTip.cs
- EventLogPermissionAttribute.cs
- PerformanceCounterManager.cs
- TabRenderer.cs
- XmlNodeComparer.cs
- SaveWorkflowCommand.cs
- DataViewManagerListItemTypeDescriptor.cs
- BehaviorEditorPart.cs
- CompareValidator.cs
- AssemblyAttributesGoHere.cs
- FaultPropagationRecord.cs
- TablePattern.cs
- XmlSchemaComplexContentRestriction.cs
- SqlInternalConnectionSmi.cs
- RijndaelManaged.cs
- StreamGeometryContext.cs
- OutputCacheSettings.cs
- DbModificationClause.cs
- HttpInputStream.cs
- TransactionContext.cs
- OperationCanceledException.cs
- FtpRequestCacheValidator.cs
- StackOverflowException.cs
- EncoderNLS.cs
- DataServiceConfiguration.cs
- ClientTargetSection.cs
- EntityException.cs
- OlePropertyStructs.cs
- HttpCachePolicy.cs
- HideDisabledControlAdapter.cs
- QuaternionAnimation.cs
- ProfilePropertyNameValidator.cs
- Attributes.cs
- XmlWriter.cs
- ActiveXContainer.cs
- SafeHandles.cs
- XamlDesignerSerializationManager.cs
- PublishLicense.cs
- SqlClientWrapperSmiStream.cs
- XmlTextReaderImpl.cs
- VersionValidator.cs
- GridViewDeleteEventArgs.cs
- LoadItemsEventArgs.cs
- IdentityManager.cs
- DictionaryBase.cs
- HandledEventArgs.cs
- Compiler.cs
- ISAPIWorkerRequest.cs
- filewebrequest.cs
- UdpDiscoveryEndpointProvider.cs
- DbProviderManifest.cs
- SdlChannelSink.cs
- BinaryConverter.cs
- ResetableIterator.cs
- IFlowDocumentViewer.cs
- SuppressMessageAttribute.cs
- AdapterUtil.cs
- StrokeSerializer.cs
- QilNode.cs
- JobDuplex.cs
- CustomTypeDescriptor.cs
- Rectangle.cs
- ConfigXmlText.cs
- MenuItemBinding.cs
- IisHelper.cs