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
- SQLChars.cs
- WindowsStatic.cs
- DataGridViewCell.cs
- PlainXmlDeserializer.cs
- ConnectionConsumerAttribute.cs
- BufferedWebEventProvider.cs
- Keywords.cs
- StatusBar.cs
- PanelDesigner.cs
- TextTabProperties.cs
- ApplicationSettingsBase.cs
- ObjectTag.cs
- DataGridViewCellStateChangedEventArgs.cs
- EastAsianLunisolarCalendar.cs
- Int64AnimationBase.cs
- CombinedGeometry.cs
- UInt16.cs
- WebConfigurationHostFileChange.cs
- ToolBarButtonClickEvent.cs
- Stroke.cs
- XmlSchemaException.cs
- SqlWriter.cs
- WebControlsSection.cs
- HttpListenerPrefixCollection.cs
- DESCryptoServiceProvider.cs
- IfElseDesigner.xaml.cs
- EntityAdapter.cs
- MessageSmuggler.cs
- EmptyEnumerable.cs
- IfAction.cs
- KeyedCollection.cs
- IPGlobalProperties.cs
- BamlRecordHelper.cs
- DayRenderEvent.cs
- ResponseBodyWriter.cs
- EpmCustomContentSerializer.cs
- RSAPKCS1SignatureFormatter.cs
- CipherData.cs
- HtmlInputPassword.cs
- PropertyKey.cs
- LicenseManager.cs
- UTF32Encoding.cs
- FtpCachePolicyElement.cs
- SplineQuaternionKeyFrame.cs
- MobileComponentEditorPage.cs
- DbException.cs
- HttpCookieCollection.cs
- ISFTagAndGuidCache.cs
- CustomErrorCollection.cs
- ToolStripSplitStackLayout.cs
- LifetimeServices.cs
- RegexFCD.cs
- BindingsCollection.cs
- WebPartConnectionsEventArgs.cs
- TraceHandler.cs
- ScriptServiceAttribute.cs
- DetailsViewDesigner.cs
- UpdateRecord.cs
- PackUriHelper.cs
- Single.cs
- ObfuscateAssemblyAttribute.cs
- DefaultProxySection.cs
- MasterPage.cs
- PropertyTab.cs
- OutputScopeManager.cs
- SamlSerializer.cs
- SplitContainer.cs
- TabControlAutomationPeer.cs
- KeyValueConfigurationElement.cs
- UnsafeNativeMethods.cs
- RotateTransform.cs
- MultiBinding.cs
- CommunicationObject.cs
- SerializationAttributes.cs
- PageOutputColor.cs
- RenderTargetBitmap.cs
- StringToken.cs
- _ChunkParse.cs
- SecurityTokenProvider.cs
- LinearGradientBrush.cs
- ToolStripGripRenderEventArgs.cs
- DocobjHost.cs
- IntegerValidatorAttribute.cs
- PolyQuadraticBezierSegment.cs
- MembershipValidatePasswordEventArgs.cs
- AssemblyNameProxy.cs
- ActiveXSite.cs
- AlignmentXValidation.cs
- DataFormats.cs
- NativeMethods.cs
- QilLoop.cs
- FlowNode.cs
- StdRegProviderWrapper.cs
- QueryExpr.cs
- SspiWrapper.cs
- IPGlobalProperties.cs
- wgx_render.cs
- SubpageParaClient.cs
- AuthenticateEventArgs.cs
- Error.cs