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
- Expression.DebuggerProxy.cs
- arclist.cs
- ShaderEffect.cs
- TargetControlTypeAttribute.cs
- _DisconnectOverlappedAsyncResult.cs
- FtpCachePolicyElement.cs
- DynamicMethod.cs
- AnnotationStore.cs
- RestHandlerFactory.cs
- SmiConnection.cs
- OpCellTreeNode.cs
- hebrewshape.cs
- MsmqIntegrationElement.cs
- PropertyManager.cs
- NavigationPropertyEmitter.cs
- ColumnMap.cs
- Thread.cs
- CompareValidator.cs
- DropTarget.cs
- WebPartVerb.cs
- SemaphoreFullException.cs
- ParseChildrenAsPropertiesAttribute.cs
- ContentValidator.cs
- GridEntry.cs
- WorkflowServiceHostFactory.cs
- SqlPersonalizationProvider.cs
- UIElementPropertyUndoUnit.cs
- ConfigUtil.cs
- GlobalProxySelection.cs
- DataObjectAttribute.cs
- SerialPinChanges.cs
- CqlIdentifiers.cs
- QueueProcessor.cs
- IArgumentProvider.cs
- PrimitiveType.cs
- MILUtilities.cs
- PolyLineSegmentFigureLogic.cs
- _NestedMultipleAsyncResult.cs
- ChildDocumentBlock.cs
- StylusCaptureWithinProperty.cs
- clipboard.cs
- AsnEncodedData.cs
- StrongNameKeyPair.cs
- XmlSiteMapProvider.cs
- ParameterElement.cs
- WebPartActionVerb.cs
- TaiwanLunisolarCalendar.cs
- RuntimeEnvironment.cs
- TextPointer.cs
- ProgressBarAutomationPeer.cs
- ValidationError.cs
- WindowsToolbarItemAsMenuItem.cs
- UDPClient.cs
- ValidatingPropertiesEventArgs.cs
- ConfigurationValues.cs
- odbcmetadatacolumnnames.cs
- EntryIndex.cs
- ArraySortHelper.cs
- XmlElementAttributes.cs
- StringInfo.cs
- MSHTMLHost.cs
- While.cs
- PageFunction.cs
- XmlElementAttributes.cs
- DesignerProperties.cs
- SchemaMerger.cs
- AlphaSortedEnumConverter.cs
- ParameterModifier.cs
- FixedPageStructure.cs
- XmlSchemaComplexContentExtension.cs
- SamlEvidence.cs
- DataColumnCollection.cs
- SettingsSection.cs
- InheritanceRules.cs
- GridPattern.cs
- UnaryExpression.cs
- SymLanguageType.cs
- infer.cs
- ValidatedControlConverter.cs
- HyperLink.cs
- SupportingTokenAuthenticatorSpecification.cs
- ComponentCommands.cs
- ReferentialConstraint.cs
- CoreSwitches.cs
- StylusPointPropertyId.cs
- Parsers.cs
- InfoCardBaseException.cs
- TextLineResult.cs
- SetterBase.cs
- RegexTree.cs
- OAVariantLib.cs
- AtomParser.cs
- DataGridViewAutoSizeModeEventArgs.cs
- PropertyDescriptorComparer.cs
- ReachNamespaceInfo.cs
- RowSpanVector.cs
- WebPartConnectionCollection.cs
- GPRECT.cs
- VirtualPathProvider.cs
- SmiXetterAccessMap.cs