Code:
/ FX-1434 / FX-1434 / 1.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
- TypeLibraryHelper.cs
- AppDomainAttributes.cs
- EmptyCollection.cs
- WebConfigurationFileMap.cs
- GeneralTransform3DTo2D.cs
- MimeFormatter.cs
- SignatureConfirmationElement.cs
- TextBounds.cs
- SqlFormatter.cs
- PointAnimationUsingPath.cs
- ActivityCodeGenerator.cs
- ObjectFullSpanRewriter.cs
- Transform3D.cs
- DigitShape.cs
- Misc.cs
- StaticFileHandler.cs
- DrawingContextWalker.cs
- RequestCachePolicyConverter.cs
- WebPartDisplayModeCollection.cs
- WebRequest.cs
- ExtendedPropertyDescriptor.cs
- MetabaseSettingsIis7.cs
- WmlValidatorAdapter.cs
- ThreadStartException.cs
- path.cs
- SqlCacheDependencyDatabase.cs
- RTLAwareMessageBox.cs
- WizardSideBarListControlItem.cs
- SoapObjectInfo.cs
- ProtocolsConfiguration.cs
- TabControlEvent.cs
- XPathDescendantIterator.cs
- DrawingAttributeSerializer.cs
- ClientOptions.cs
- ThreadInterruptedException.cs
- MouseEvent.cs
- WinEventTracker.cs
- ExpandedWrapper.cs
- PathGradientBrush.cs
- CustomLineCap.cs
- GrammarBuilderPhrase.cs
- AppSecurityManager.cs
- ValidatorAttribute.cs
- ChangeBlockUndoRecord.cs
- EntityDataSourceChangedEventArgs.cs
- GrabHandleGlyph.cs
- TimeSpan.cs
- XmlResolver.cs
- GridViewRow.cs
- DrawingContextDrawingContextWalker.cs
- DataServiceQueryProvider.cs
- XmlNullResolver.cs
- NullableIntMinMaxAggregationOperator.cs
- OutputCacheSettingsSection.cs
- _HeaderInfo.cs
- XmlIlGenerator.cs
- Interlocked.cs
- CustomAssemblyResolver.cs
- ProcessModelInfo.cs
- ObjectStateEntryDbUpdatableDataRecord.cs
- CodeCatchClauseCollection.cs
- ConstructorBuilder.cs
- DrawingContextDrawingContextWalker.cs
- XamlWriter.cs
- HttpCacheParams.cs
- UnionExpr.cs
- StorageRoot.cs
- ElementUtil.cs
- PropertyMetadata.cs
- PageRouteHandler.cs
- ParameterToken.cs
- SystemInfo.cs
- DoubleUtil.cs
- ObjRef.cs
- VirtualDirectoryMapping.cs
- BitmapEffectOutputConnector.cs
- ToolStripDropDownClosingEventArgs.cs
- MbpInfo.cs
- TextElementCollectionHelper.cs
- IssuanceLicense.cs
- ListItemsCollectionEditor.cs
- ConfigurationStrings.cs
- FileDocument.cs
- Model3D.cs
- HtmlTableRowCollection.cs
- RegexCompilationInfo.cs
- Model3D.cs
- UiaCoreApi.cs
- OutOfMemoryException.cs
- DbgUtil.cs
- HtmlInputHidden.cs
- SqlClientMetaDataCollectionNames.cs
- XmlNodeChangedEventManager.cs
- TagNameToTypeMapper.cs
- RegionData.cs
- XPathDocument.cs
- ClrProviderManifest.cs
- NumberAction.cs
- PolyLineSegmentFigureLogic.cs
- Geometry.cs