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
- CompiledRegexRunner.cs
- RuleSetCollection.cs
- Pair.cs
- ScrollContentPresenter.cs
- SqlTypesSchemaImporter.cs
- StructuredType.cs
- CompensateDesigner.cs
- ArgumentException.cs
- CaseStatement.cs
- XsltConvert.cs
- LineServicesCallbacks.cs
- CapabilitiesAssignment.cs
- CanonicalizationDriver.cs
- StatusBarPanelClickEvent.cs
- ValueUnavailableException.cs
- PointF.cs
- XmlObjectSerializerContext.cs
- Queue.cs
- ManipulationVelocities.cs
- parserscommon.cs
- COM2IVsPerPropertyBrowsingHandler.cs
- ADMembershipUser.cs
- ServiceProviders.cs
- Html32TextWriter.cs
- SqlDataSourceSelectingEventArgs.cs
- CustomAssemblyResolver.cs
- DbProviderManifest.cs
- TransformationRules.cs
- HtmlWindow.cs
- SlipBehavior.cs
- CurrentChangingEventArgs.cs
- GrabHandleGlyph.cs
- DbUpdateCommandTree.cs
- ApplicationFileParser.cs
- HwndStylusInputProvider.cs
- Int64AnimationBase.cs
- _StreamFramer.cs
- XmlSchemaGroup.cs
- TrustManager.cs
- XmlCountingReader.cs
- UpWmlMobileTextWriter.cs
- ObjectIDGenerator.cs
- ContentWrapperAttribute.cs
- DocumentViewer.cs
- TraceInternal.cs
- ByteStack.cs
- FileDialog_Vista.cs
- XhtmlBasicListAdapter.cs
- Point3DAnimationBase.cs
- DataGridViewElement.cs
- SelectionItemProviderWrapper.cs
- Size3DValueSerializer.cs
- RevocationPoint.cs
- SelectedGridItemChangedEvent.cs
- DashStyle.cs
- DataServiceProcessingPipeline.cs
- oledbmetadatacollectionnames.cs
- TypeElementCollection.cs
- DotNetATv1WindowsLogEntryDeserializer.cs
- WizardStepBase.cs
- DesignerToolStripControlHost.cs
- ProgressChangedEventArgs.cs
- WebPermission.cs
- SupportingTokenDuplexChannel.cs
- DataControlFieldHeaderCell.cs
- ActivityValidator.cs
- DataListItemEventArgs.cs
- PropertyChangedEventArgs.cs
- WebHeaderCollection.cs
- FormatSelectingMessageInspector.cs
- CharacterMetricsDictionary.cs
- DataGridBeginningEditEventArgs.cs
- InstanceOwnerException.cs
- DataBoundControlAdapter.cs
- ProfileService.cs
- ContainerFilterService.cs
- GroupBoxAutomationPeer.cs
- XmlWriterSettings.cs
- AnnotationObservableCollection.cs
- ToolStripPanelRenderEventArgs.cs
- PolyLineSegment.cs
- ListViewGroupConverter.cs
- PropertyEntry.cs
- SyndicationPerson.cs
- TableHeaderCell.cs
- KeyBinding.cs
- FontCacheUtil.cs
- SortedSet.cs
- JsonServiceDocumentSerializer.cs
- DataGridAutoGeneratingColumnEventArgs.cs
- SqlAggregateChecker.cs
- ToolStripManager.cs
- MenuItemBinding.cs
- Stroke2.cs
- C14NUtil.cs
- MenuItem.cs
- HMACMD5.cs
- DataGridViewBand.cs
- HtmlInputRadioButton.cs
- StylusEventArgs.cs