Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / untmp / whidbey / QFE / 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]; } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- Rectangle.cs
- OracleMonthSpan.cs
- StorageModelBuildProvider.cs
- RouteParameter.cs
- metadatamappinghashervisitor.hashsourcebuilder.cs
- Positioning.cs
- HtmlTextViewAdapter.cs
- DSGeneratorProblem.cs
- ISO2022Encoding.cs
- SaveFileDialog.cs
- EdmItemCollection.cs
- PropertyTab.cs
- MessageEventSubscriptionService.cs
- OledbConnectionStringbuilder.cs
- GridView.cs
- BuildManager.cs
- CommonDialog.cs
- MediaScriptCommandRoutedEventArgs.cs
- PolyLineSegment.cs
- DropDownButton.cs
- ClientSettingsSection.cs
- WindowsTokenRoleProvider.cs
- OraclePermission.cs
- Byte.cs
- ListViewItemEventArgs.cs
- Splitter.cs
- XmlSchemaSubstitutionGroup.cs
- ReflectionHelper.cs
- ContentElementCollection.cs
- TextElementCollection.cs
- DesignerProperties.cs
- InvalidWMPVersionException.cs
- EntityWithChangeTrackerStrategy.cs
- RightsManagementEncryptedStream.cs
- TagPrefixAttribute.cs
- ReferenceEqualityComparer.cs
- AppModelKnownContentFactory.cs
- DataGridCellAutomationPeer.cs
- IndexedGlyphRun.cs
- PathBox.cs
- HttpListener.cs
- SqlTriggerContext.cs
- SafeFindHandle.cs
- UserCancellationException.cs
- HttpAsyncResult.cs
- ObjectTokenCategory.cs
- documentation.cs
- ReadOnlyObservableCollection.cs
- EncryptedPackage.cs
- ClientSettingsProvider.cs
- TypeNameConverter.cs
- _ChunkParse.cs
- Pair.cs
- TraceSection.cs
- DataContractSerializerSection.cs
- JsonReader.cs
- WorkerRequest.cs
- SettingsPropertyValue.cs
- Pair.cs
- FixedNode.cs
- ToolBarPanel.cs
- ClientOperationFormatterProvider.cs
- Bind.cs
- SynchronizingStream.cs
- _SecureChannel.cs
- HttpException.cs
- SimpleRecyclingCache.cs
- BinarySerializer.cs
- ListSortDescriptionCollection.cs
- Receive.cs
- ButtonBaseAdapter.cs
- Soap12FormatExtensions.cs
- TypedTableBase.cs
- StatusBarPanelClickEvent.cs
- EndpointInstanceProvider.cs
- RelOps.cs
- IERequestCache.cs
- Canvas.cs
- EncryptedData.cs
- ZipIOLocalFileDataDescriptor.cs
- ListViewDeletedEventArgs.cs
- PeerCollaboration.cs
- LinkConverter.cs
- ProfileSettings.cs
- DataGridViewLinkColumn.cs
- PolicyManager.cs
- TrackingQueryElement.cs
- PrePrepareMethodAttribute.cs
- SoapRpcServiceAttribute.cs
- PropertyEmitterBase.cs
- InheritanceContextChangedEventManager.cs
- KnownBoxes.cs
- FrameAutomationPeer.cs
- TagPrefixInfo.cs
- UserControlCodeDomTreeGenerator.cs
- TimeSpanSecondsConverter.cs
- Version.cs
- ApplicationBuildProvider.cs
- TemplateKey.cs
- ExcCanonicalXml.cs