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
- WindowsAltTab.cs
- CalendarItem.cs
- DeviceContext.cs
- ResXBuildProvider.cs
- RegexMatchCollection.cs
- GlyphsSerializer.cs
- RequestStatusBarUpdateEventArgs.cs
- SchemaObjectWriter.cs
- TableCell.cs
- CancellationTokenSource.cs
- TailCallAnalyzer.cs
- Gdiplus.cs
- PermissionRequestEvidence.cs
- UnsafeNativeMethodsPenimc.cs
- WebMessageBodyStyleHelper.cs
- DataGridRow.cs
- HttpCookie.cs
- SQLInt32.cs
- SqlTransaction.cs
- LineSegment.cs
- HierarchicalDataBoundControl.cs
- ServicePointManagerElement.cs
- formatstringdialog.cs
- TextRangeProviderWrapper.cs
- VectorAnimationUsingKeyFrames.cs
- DocumentPageHost.cs
- DataGridViewToolTip.cs
- TreeView.cs
- PageContent.cs
- ListQueryResults.cs
- MappingSource.cs
- ProfileParameter.cs
- PaintValueEventArgs.cs
- WorkflowDurableInstance.cs
- CheckPair.cs
- ToolstripProfessionalRenderer.cs
- TypeDescriptionProvider.cs
- SendKeys.cs
- LinqDataSourceDisposeEventArgs.cs
- ToolStripCodeDomSerializer.cs
- PasswordRecovery.cs
- DataGridTextBox.cs
- HashAlgorithm.cs
- XPathSelectionIterator.cs
- SafeIUnknown.cs
- ClientClassGenerator.cs
- SHA1.cs
- X509SecurityToken.cs
- SHA256.cs
- ColumnMapVisitor.cs
- WebBrowserProgressChangedEventHandler.cs
- PathFigure.cs
- Missing.cs
- DelegateArgumentValue.cs
- ListChunk.cs
- TreeIterator.cs
- TempFiles.cs
- AnnotationResourceChangedEventArgs.cs
- AttributeEmitter.cs
- ToolStripPanelRow.cs
- SchemaElementLookUpTable.cs
- ProfileElement.cs
- DefaultValueConverter.cs
- SecureEnvironment.cs
- NetworkAddressChange.cs
- AuthorizationRuleCollection.cs
- TypeSource.cs
- CaretElement.cs
- ScrollContentPresenter.cs
- IssuedTokenServiceCredential.cs
- Directory.cs
- TranslateTransform3D.cs
- SecurityManager.cs
- ModelVisual3D.cs
- EditorServiceContext.cs
- XpsLiterals.cs
- IndexedEnumerable.cs
- PlainXmlSerializer.cs
- SettingsPropertyNotFoundException.cs
- HTMLTagNameToTypeMapper.cs
- TextSerializer.cs
- RadioButtonList.cs
- ChangeDirector.cs
- MetadataArtifactLoaderResource.cs
- WindowsGraphics.cs
- XmlSchemaSimpleTypeList.cs
- PrimitiveXmlSerializers.cs
- XmlReaderDelegator.cs
- SignatureDescription.cs
- QueryResults.cs
- AssemblyNameEqualityComparer.cs
- OleDbConnectionInternal.cs
- LocalFileSettingsProvider.cs
- RepeatButtonAutomationPeer.cs
- SegmentInfo.cs
- PointHitTestParameters.cs
- Attributes.cs
- SafeIUnknown.cs
- XmlStringTable.cs
- ProfileModule.cs