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
- SpnEndpointIdentityExtension.cs
- RuntimeHelpers.cs
- ToolStripItemRenderEventArgs.cs
- StdValidatorsAndConverters.cs
- AuthenticationManager.cs
- IPAddress.cs
- ListViewItemSelectionChangedEvent.cs
- HttpModulesSection.cs
- DeploymentSection.cs
- AnyReturnReader.cs
- CreateUserWizard.cs
- Rotation3DAnimationBase.cs
- UnknownMessageReceivedEventArgs.cs
- NamespaceImport.cs
- DeviceContext.cs
- ConfigXmlAttribute.cs
- FlowDocumentPage.cs
- EncodingNLS.cs
- TraceSection.cs
- DeriveBytes.cs
- XamlFilter.cs
- Debugger.cs
- InputReport.cs
- IssuedTokensHeader.cs
- RelativeSource.cs
- TemplateBindingExpression.cs
- MessageQueuePermissionEntryCollection.cs
- itemelement.cs
- QuaternionValueSerializer.cs
- HtmlInputImage.cs
- SecurityManager.cs
- LoadMessageLogger.cs
- MergeFailedEvent.cs
- SspiWrapper.cs
- Peer.cs
- LayoutDump.cs
- HttpListenerException.cs
- AdornerLayer.cs
- InvokePattern.cs
- MarkupProperty.cs
- CfgParser.cs
- AuthenticationException.cs
- DataGridViewCellValidatingEventArgs.cs
- CSharpCodeProvider.cs
- XsdDataContractExporter.cs
- RadioButton.cs
- NameValueCollection.cs
- AnnotationHelper.cs
- TableStyle.cs
- HtmlHead.cs
- TdsParameterSetter.cs
- LinkedResource.cs
- GraphicsPathIterator.cs
- RenderTargetBitmap.cs
- FormsAuthenticationUserCollection.cs
- SqlPersonalizationProvider.cs
- ZipIOLocalFileHeader.cs
- EpmTargetTree.cs
- BitmapDownload.cs
- WebPartManager.cs
- FixedTextView.cs
- EncodingStreamWrapper.cs
- Shape.cs
- updatecommandorderer.cs
- VectorCollectionConverter.cs
- FontFamilyValueSerializer.cs
- UnSafeCharBuffer.cs
- NonceCache.cs
- CreateRefExpr.cs
- XmlReflectionMember.cs
- ErasingStroke.cs
- followingsibling.cs
- NameSpaceExtractor.cs
- ParameterSubsegment.cs
- FlowLayoutSettings.cs
- SplitterPanel.cs
- RowBinding.cs
- DataColumnPropertyDescriptor.cs
- MouseEvent.cs
- TextProperties.cs
- XPathDocumentNavigator.cs
- EntityException.cs
- WebBrowsableAttribute.cs
- BoundPropertyEntry.cs
- Matrix3D.cs
- OSFeature.cs
- StringResourceManager.cs
- DiscoveryClientReferences.cs
- ExpressionHelper.cs
- HtmlInputText.cs
- AndMessageFilter.cs
- ILGenerator.cs
- RectangleF.cs
- LogicalMethodInfo.cs
- LabelDesigner.cs
- LayoutManager.cs
- XmlILTrace.cs
- StaticExtensionConverter.cs
- EventMemberCodeDomSerializer.cs
- FormViewPageEventArgs.cs