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
- DelegateBodyWriter.cs
- DataGridViewDataConnection.cs
- ContentControl.cs
- Internal.cs
- BevelBitmapEffect.cs
- QilName.cs
- UInt16Converter.cs
- UIElementIsland.cs
- StartUpEventArgs.cs
- MessagePropertyVariants.cs
- BrowserPolicyValidator.cs
- FileEnumerator.cs
- UIHelper.cs
- ResourcePart.cs
- GridToolTip.cs
- CodeStatementCollection.cs
- DoubleSumAggregationOperator.cs
- ServiceModelConfigurationSectionCollection.cs
- ListSortDescriptionCollection.cs
- ZipPackagePart.cs
- AppLevelCompilationSectionCache.cs
- MD5.cs
- FileDetails.cs
- DeadCharTextComposition.cs
- SqlMethodAttribute.cs
- DiagnosticTraceSource.cs
- ResXResourceWriter.cs
- xamlnodes.cs
- ConfigurationSectionCollection.cs
- RefExpr.cs
- StaticSiteMapProvider.cs
- Model3DGroup.cs
- OutputCacheProfile.cs
- FileFormatException.cs
- DesignerObjectListAdapter.cs
- StringWriter.cs
- ColorBlend.cs
- MarginsConverter.cs
- FontInfo.cs
- DocobjHost.cs
- DataGridDetailsPresenterAutomationPeer.cs
- ToolBar.cs
- Stopwatch.cs
- SessionEndingCancelEventArgs.cs
- MemberInfoSerializationHolder.cs
- XPathParser.cs
- ButtonBase.cs
- DrawListViewItemEventArgs.cs
- ListComponentEditorPage.cs
- SocketConnection.cs
- WorkflowViewManager.cs
- Clipboard.cs
- InheritedPropertyChangedEventArgs.cs
- PairComparer.cs
- GeometryModel3D.cs
- SmtpException.cs
- Stylesheet.cs
- StyleXamlParser.cs
- XmlHelper.cs
- TreeNodeMouseHoverEvent.cs
- XamlStream.cs
- StorageEntityContainerMapping.cs
- ExpressionBindings.cs
- CatalogPartCollection.cs
- ContractSearchPattern.cs
- ParserStreamGeometryContext.cs
- WpfPayload.cs
- MenuAdapter.cs
- WebPartZoneBase.cs
- GeometryModel3D.cs
- StrongNameUtility.cs
- AppDomainFactory.cs
- QueryCacheManager.cs
- DecimalConstantAttribute.cs
- MetadataArtifactLoaderComposite.cs
- Stack.cs
- TableLayoutSettings.cs
- WindowsTitleBar.cs
- DnsPermission.cs
- InputReferenceExpression.cs
- BinaryObjectWriter.cs
- TableCellCollection.cs
- PathSegmentCollection.cs
- PropertyToken.cs
- CollectionEditor.cs
- DataServiceException.cs
- PagerSettings.cs
- CompressedStack.cs
- CompiledAction.cs
- PrinterUnitConvert.cs
- DefaultBindingPropertyAttribute.cs
- TextTreeText.cs
- ThreadInterruptedException.cs
- CounterCreationDataCollection.cs
- ISO2022Encoding.cs
- AuthorizationRuleCollection.cs
- SafeLocalMemHandle.cs
- SymLanguageVendor.cs
- AutomationAttributeInfo.cs
- TextWriterTraceListener.cs