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
- TaskHelper.cs
- LogLogRecordEnumerator.cs
- ListBoxItem.cs
- MemoryFailPoint.cs
- Bold.cs
- UInt32.cs
- FigureHelper.cs
- FocusTracker.cs
- FileUtil.cs
- DataListCommandEventArgs.cs
- DocumentGridPage.cs
- Stylesheet.cs
- StylusOverProperty.cs
- WebPartHeaderCloseVerb.cs
- GestureRecognizer.cs
- CodeBinaryOperatorExpression.cs
- Adorner.cs
- DashStyle.cs
- Int16.cs
- CompensatableTransactionScopeActivity.cs
- ObjectQuery.cs
- StringFormat.cs
- BasicAsyncResult.cs
- MetadataSource.cs
- GenericPrincipal.cs
- ArraySortHelper.cs
- EmptyEnumerator.cs
- BitmapEffectGeneralTransform.cs
- ListView.cs
- LogPolicy.cs
- PenLineJoinValidation.cs
- BadImageFormatException.cs
- HttpPostServerProtocol.cs
- ErrorRuntimeConfig.cs
- CompositeFontInfo.cs
- ObjectDataSourceStatusEventArgs.cs
- CodeNamespace.cs
- NameSpaceExtractor.cs
- TextBoxAutoCompleteSourceConverter.cs
- Point.cs
- GridItemPattern.cs
- WindowsSpinner.cs
- EntityDesignerDataSourceView.cs
- SqlClientPermission.cs
- ValueUtilsSmi.cs
- WmfPlaceableFileHeader.cs
- DTCTransactionManager.cs
- MailMessage.cs
- DataContractSet.cs
- MailBnfHelper.cs
- PriorityChain.cs
- SmiConnection.cs
- MultipleViewPatternIdentifiers.cs
- CounterSampleCalculator.cs
- TableItemPattern.cs
- FileSystemEventArgs.cs
- Bits.cs
- Bind.cs
- TransformedBitmap.cs
- RegexCompilationInfo.cs
- XmlSchemaObjectTable.cs
- BamlBinaryReader.cs
- SQLResource.cs
- DataSourceHelper.cs
- IUnknownConstantAttribute.cs
- PTManager.cs
- Condition.cs
- SamlAudienceRestrictionCondition.cs
- DBSchemaRow.cs
- TypeUsageBuilder.cs
- ParseHttpDate.cs
- Metadata.cs
- VirtualPathUtility.cs
- SizeChangedEventArgs.cs
- ClientSponsor.cs
- CodeParameterDeclarationExpression.cs
- EventBuilder.cs
- Msec.cs
- Simplifier.cs
- CatalogPartChrome.cs
- SectionInput.cs
- rsa.cs
- DataGridViewSelectedColumnCollection.cs
- TrackBar.cs
- CryptoApi.cs
- RegexCompilationInfo.cs
- ApplicationId.cs
- ScriptComponentDescriptor.cs
- EntityDataSourceViewSchema.cs
- PrintingPermissionAttribute.cs
- ProvidersHelper.cs
- ContentFileHelper.cs
- ByteStream.cs
- FrameworkElementAutomationPeer.cs
- MDIClient.cs
- MediaElementAutomationPeer.cs
- OSFeature.cs
- DesignTimeVisibleAttribute.cs
- CriticalHandle.cs
- Pen.cs