Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / clr / src / BCL / System / Runtime / Serialization / SerializationInfoEnumerator.cs / 1305376 / 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; using System.Diagnostics.Contracts; // // 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) { Contract.Assert(members!=null, "[SerializationInfoEnumerator.ctor]members!=null"); Contract.Assert(info!=null, "[SerializationInfoEnumerator.ctor]info!=null"); Contract.Assert(types!=null, "[SerializationInfoEnumerator.ctor]types!=null"); Contract.Assert(numItems>=0, "[SerializationInfoEnumerator.ctor]numItems>=0"); Contract.Assert(members.Length>=numItems, "[SerializationInfoEnumerator.ctor]members.Length>=numItems"); Contract.Assert(info.Length>=numItems, "[SerializationInfoEnumerator.ctor]info.Length>=numItems"); Contract.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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- RegexBoyerMoore.cs
- CorrelationScope.cs
- ServiceHttpModule.cs
- SqlProviderManifest.cs
- WebPartDescriptionCollection.cs
- TransformGroup.cs
- FilterQuery.cs
- FormViewRow.cs
- UrlMappingCollection.cs
- SHA384Managed.cs
- DataServiceQueryProvider.cs
- HtmlTableCell.cs
- D3DImage.cs
- _LocalDataStoreMgr.cs
- SoapExtensionReflector.cs
- ToolStripDropDownDesigner.cs
- NumberFunctions.cs
- HtmlProps.cs
- ClientTargetCollection.cs
- DependencyObject.cs
- BufferBuilder.cs
- DiscoveryServerProtocol.cs
- ListItem.cs
- ToolStripItemTextRenderEventArgs.cs
- GenerateScriptTypeAttribute.cs
- AsmxEndpointPickerExtension.cs
- ProcessProtocolHandler.cs
- Profiler.cs
- StorageScalarPropertyMapping.cs
- Rect3D.cs
- CodeExporter.cs
- SQLResource.cs
- ColorDialog.cs
- HtmlProps.cs
- WorkflowInstanceProvider.cs
- TextDecorationLocationValidation.cs
- EventLogReader.cs
- Command.cs
- XmlObjectSerializer.cs
- Positioning.cs
- WSSecureConversation.cs
- BitStack.cs
- SafeRightsManagementSessionHandle.cs
- xmlglyphRunInfo.cs
- QualifiedCellIdBoolean.cs
- AsymmetricAlgorithm.cs
- ReaderContextStackData.cs
- PersonalizationStateQuery.cs
- NativeMethods.cs
- ValidationRule.cs
- XmlDictionaryReaderQuotas.cs
- MarshalByRefObject.cs
- HttpRequest.cs
- DataGridViewHitTestInfo.cs
- CodeAttributeDeclaration.cs
- PopupEventArgs.cs
- HitTestParameters.cs
- Metadata.cs
- Native.cs
- StyleHelper.cs
- ValueChangedEventManager.cs
- BaseAsyncResult.cs
- DataErrorValidationRule.cs
- TypeListConverter.cs
- SecUtil.cs
- KeyFrames.cs
- X509CertificateTrustedIssuerElementCollection.cs
- DelegateTypeInfo.cs
- SecurityPolicySection.cs
- TypeSystem.cs
- Cursors.cs
- ExpandSegment.cs
- TableLayoutColumnStyleCollection.cs
- TransactedReceiveData.cs
- MergePropertyDescriptor.cs
- GridView.cs
- DataRowView.cs
- SafeJobHandle.cs
- BrushProxy.cs
- HtmlGenericControl.cs
- HttpResponseHeader.cs
- DoubleAnimationBase.cs
- SqlStream.cs
- XPathSelfQuery.cs
- BadImageFormatException.cs
- LogWriteRestartAreaState.cs
- AncillaryOps.cs
- ModifiableIteratorCollection.cs
- StreamGeometry.cs
- updateconfighost.cs
- Rect3DValueSerializer.cs
- Polyline.cs
- InfoCardSymmetricAlgorithm.cs
- CacheSection.cs
- Utilities.cs
- LoginName.cs
- NumberFormatter.cs
- IChannel.cs
- OdbcConnectionPoolProviderInfo.cs
- APCustomTypeDescriptor.cs