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
- RtfNavigator.cs
- PreservationFileReader.cs
- EdmToObjectNamespaceMap.cs
- GetCryptoTransformRequest.cs
- XmlSubtreeReader.cs
- ShaderRenderModeValidation.cs
- UrlAuthorizationModule.cs
- ObjectConverter.cs
- StartUpEventArgs.cs
- ConstraintConverter.cs
- HtmlTextViewAdapter.cs
- RegistrySecurity.cs
- EncryptRequest.cs
- SpecialTypeDataContract.cs
- VerticalAlignConverter.cs
- _UriSyntax.cs
- DataPagerFieldCommandEventArgs.cs
- XPathNavigatorReader.cs
- MinimizableAttributeTypeConverter.cs
- SystemSounds.cs
- SafeProcessHandle.cs
- LayeredChannelListener.cs
- WebEventTraceProvider.cs
- ScrollEvent.cs
- CollectionChangedEventManager.cs
- MethodBody.cs
- BuilderInfo.cs
- QilInvokeLateBound.cs
- ProcessStartInfo.cs
- URIFormatException.cs
- GACMembershipCondition.cs
- HotCommands.cs
- FolderNameEditor.cs
- SemaphoreFullException.cs
- Matrix3D.cs
- WindowsGraphics2.cs
- Table.cs
- compensatingcollection.cs
- LightweightCodeGenerator.cs
- VarRemapper.cs
- SQLGuidStorage.cs
- CustomAssemblyResolver.cs
- ToolStripDropDownMenu.cs
- Range.cs
- OrderedDictionary.cs
- TextTreeTextBlock.cs
- AssertSection.cs
- PaperSize.cs
- TextServicesLoader.cs
- NavigateEvent.cs
- WhileDesigner.cs
- SHA384Cng.cs
- AuthenticationConfig.cs
- ShaperBuffers.cs
- SqlClientPermission.cs
- CurrencyManager.cs
- Parameter.cs
- WebMessageEncodingElement.cs
- RenderTargetBitmap.cs
- EventDrivenDesigner.cs
- SerializationObjectManager.cs
- ClonableStack.cs
- NativeCppClassAttribute.cs
- XmlDocumentSerializer.cs
- ColorMap.cs
- TraceData.cs
- TableItemStyle.cs
- SignatureHelper.cs
- XmlSchemaAppInfo.cs
- ValueUnavailableException.cs
- ParallelTimeline.cs
- ListDictionaryInternal.cs
- SourceFileBuildProvider.cs
- ScaleTransform3D.cs
- WindowsRegion.cs
- HtmlImageAdapter.cs
- InstancePersistence.cs
- MasterPage.cs
- TextBoxDesigner.cs
- HorizontalAlignConverter.cs
- ImpersonateTokenRef.cs
- ListBoxItem.cs
- FixUpCollection.cs
- DataControlPagerLinkButton.cs
- HierarchicalDataBoundControl.cs
- SapiAttributeParser.cs
- ConstructorNeedsTagAttribute.cs
- UserValidatedEventArgs.cs
- WebPartDisplayModeEventArgs.cs
- PopupControlService.cs
- UriParserTemplates.cs
- DetailsViewInsertEventArgs.cs
- ClientRuntimeConfig.cs
- CancellationHandlerDesigner.cs
- DesignerAttributeInfo.cs
- FileDialogCustomPlacesCollection.cs
- StylusPointPropertyUnit.cs
- SQLUtility.cs
- ContextDataSourceView.cs
- SystemInfo.cs