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
- CustomSignedXml.cs
- SqlConnectionPoolGroupProviderInfo.cs
- SizeFConverter.cs
- ImageListImageEditor.cs
- TdsParserStaticMethods.cs
- VoiceSynthesis.cs
- MsmqBindingMonitor.cs
- GuidTagList.cs
- Group.cs
- HttpHandlersSection.cs
- odbcmetadatacollectionnames.cs
- DeferredElementTreeState.cs
- EventListener.cs
- XmlDeclaration.cs
- ElementAction.cs
- TableLayoutSettings.cs
- GridViewItemAutomationPeer.cs
- ArglessEventHandlerProxy.cs
- ColorAnimationBase.cs
- ConfigurationElementProperty.cs
- IteratorAsyncResult.cs
- AutomationEventArgs.cs
- ResourceDisplayNameAttribute.cs
- DataListComponentEditor.cs
- NativeMethods.cs
- WaveHeader.cs
- BackgroundWorker.cs
- HttpHandlerAction.cs
- Renderer.cs
- FolderLevelBuildProviderCollection.cs
- XsdSchemaFileEditor.cs
- CodeMemberProperty.cs
- StylusPlugInCollection.cs
- SqlDataSourceQuery.cs
- Typeface.cs
- StorageAssociationTypeMapping.cs
- SqlError.cs
- Path.cs
- ElapsedEventArgs.cs
- ToolBarTray.cs
- RotateTransform.cs
- FontDialog.cs
- Point.cs
- _UriSyntax.cs
- ComponentRenameEvent.cs
- CompositionTarget.cs
- TimelineGroup.cs
- Speller.cs
- JsonEnumDataContract.cs
- PartialList.cs
- CryptoHelper.cs
- WindowsStatusBar.cs
- FontNameConverter.cs
- EntityDataSourceChangingEventArgs.cs
- UpdatableWrapper.cs
- DocumentCollection.cs
- CommentEmitter.cs
- StylusEventArgs.cs
- HandlerFactoryCache.cs
- QuadraticBezierSegment.cs
- ServicesExceptionNotHandledEventArgs.cs
- CodeSnippetExpression.cs
- ISAPIWorkerRequest.cs
- _WinHttpWebProxyDataBuilder.cs
- CachedPathData.cs
- ResourcePermissionBaseEntry.cs
- ObjectViewListener.cs
- SqlUDTStorage.cs
- DataObjectSettingDataEventArgs.cs
- Types.cs
- ACL.cs
- SoapTypeAttribute.cs
- SerializationInfo.cs
- BoundingRectTracker.cs
- CodeExporter.cs
- XDRSchema.cs
- FormViewPagerRow.cs
- MaskPropertyEditor.cs
- ZipIOCentralDirectoryDigitalSignature.cs
- SerializableAuthorizationContext.cs
- TlsnegoTokenProvider.cs
- MetadataCollection.cs
- StackOverflowException.cs
- DocumentReference.cs
- XhtmlBasicFormAdapter.cs
- Code.cs
- MultilineStringEditor.cs
- CodeMethodInvokeExpression.cs
- XmlSchemaDatatype.cs
- RequestCachePolicy.cs
- ObjectDataSourceStatusEventArgs.cs
- MetadataItem.cs
- CapabilitiesRule.cs
- ScrollPatternIdentifiers.cs
- WinCategoryAttribute.cs
- StructuralType.cs
- QilValidationVisitor.cs
- SecureUICommand.cs
- VariableAction.cs
- Part.cs