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
- CorrelationToken.cs
- DetailsViewDeleteEventArgs.cs
- ConnectionPointGlyph.cs
- EventListenerClientSide.cs
- ExtenderProvidedPropertyAttribute.cs
- Int32Storage.cs
- ScrollBar.cs
- MediaPlayerState.cs
- DataDocumentXPathNavigator.cs
- SendMailErrorEventArgs.cs
- XmlKeywords.cs
- x509utils.cs
- MarkedHighlightComponent.cs
- ExpressionList.cs
- SponsorHelper.cs
- DBNull.cs
- PostBackOptions.cs
- FacetValueContainer.cs
- TextTreeDeleteContentUndoUnit.cs
- Single.cs
- SendMailErrorEventArgs.cs
- ConfigurationException.cs
- DifferencingCollection.cs
- DatagridviewDisplayedBandsData.cs
- QueryContext.cs
- DataRecordInternal.cs
- NativeRightsManagementAPIsStructures.cs
- ClientData.cs
- ButtonBase.cs
- Triplet.cs
- Column.cs
- SamlAuthenticationStatement.cs
- RoutedCommand.cs
- DateTimeFormat.cs
- LocalizedNameDescriptionPair.cs
- XmlSignificantWhitespace.cs
- DataGridViewMethods.cs
- ExceptionValidationRule.cs
- ScriptManagerProxy.cs
- ConditionalDesigner.cs
- IndicShape.cs
- FieldBuilder.cs
- AuthenticationSection.cs
- CodeMethodReturnStatement.cs
- Funcletizer.cs
- GeneralTransform3DGroup.cs
- TerminateDesigner.cs
- DataPagerCommandEventArgs.cs
- RequestBringIntoViewEventArgs.cs
- JsonXmlDataContract.cs
- DataGridViewLayoutData.cs
- httpserverutility.cs
- SerializationObjectManager.cs
- TextAdaptor.cs
- InstanceDataCollectionCollection.cs
- _SecureChannel.cs
- ClientScriptManager.cs
- GridItem.cs
- EntitySqlQueryCacheEntry.cs
- PropertyMappingExceptionEventArgs.cs
- PersianCalendar.cs
- AttributeTableBuilder.cs
- ArraySet.cs
- HashCodeCombiner.cs
- DependencyObjectPropertyDescriptor.cs
- StateMachineSubscriptionManager.cs
- KnownTypeDataContractResolver.cs
- XmlAnyElementAttribute.cs
- XsltConvert.cs
- DataColumn.cs
- ECDsa.cs
- ToolboxItemAttribute.cs
- DecimalConverter.cs
- DataColumnMapping.cs
- ExpanderAutomationPeer.cs
- TempFiles.cs
- ListViewHitTestInfo.cs
- LocalFileSettingsProvider.cs
- AuthenticationConfig.cs
- BaseTypeViewSchema.cs
- DynamicEndpoint.cs
- X509CertificateClaimSet.cs
- GroupBoxAutomationPeer.cs
- ResXResourceSet.cs
- NotSupportedException.cs
- Transform.cs
- BitmapEffectGroup.cs
- MultiBinding.cs
- ObjectAssociationEndMapping.cs
- ResourcePropertyMemberCodeDomSerializer.cs
- ComponentChangedEvent.cs
- DataPagerFieldCollection.cs
- PrimitiveDataContract.cs
- HtmlInputRadioButton.cs
- MailMessage.cs
- ToolStripPanelRow.cs
- ProtocolImporter.cs
- CrossContextChannel.cs
- TreeViewAutomationPeer.cs
- BinaryReader.cs