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
- RadioButton.cs
- FieldToken.cs
- ArcSegment.cs
- OleDbInfoMessageEvent.cs
- HtmlAnchor.cs
- Matrix.cs
- Int16Animation.cs
- WebPartCloseVerb.cs
- TreeNodeBindingCollection.cs
- Point4DValueSerializer.cs
- FileStream.cs
- Timeline.cs
- HtmlAnchor.cs
- SmiGettersStream.cs
- MessageBox.cs
- MsmqProcessProtocolHandler.cs
- EmptyEnumerable.cs
- WebConfigurationManager.cs
- SelectManyQueryOperator.cs
- AttachedProperty.cs
- FillBehavior.cs
- Propagator.JoinPropagator.cs
- WindowsScrollBar.cs
- DataGridViewColumnCollectionDialog.cs
- CacheOutputQuery.cs
- GeneralTransform3DGroup.cs
- FrameworkElement.cs
- BooleanAnimationUsingKeyFrames.cs
- ImageFormat.cs
- MobileSysDescriptionAttribute.cs
- ConfigurationProviderException.cs
- CodeBinaryOperatorExpression.cs
- DataTableReader.cs
- OperationAbortedException.cs
- TypeConvertions.cs
- ConvertBinder.cs
- DefaultTypeArgumentAttribute.cs
- TransformGroup.cs
- WebRequestModuleElementCollection.cs
- SystemIcmpV6Statistics.cs
- ThemeableAttribute.cs
- ActiveDocumentEvent.cs
- RepeatInfo.cs
- SmtpReplyReader.cs
- QuaternionAnimationUsingKeyFrames.cs
- Exception.cs
- XhtmlBasicImageAdapter.cs
- Span.cs
- GridPatternIdentifiers.cs
- MessagePartDescription.cs
- SerializationObjectManager.cs
- TypeLoadException.cs
- Column.cs
- MDIWindowDialog.cs
- SessionStateSection.cs
- UrlMapping.cs
- ResourceDictionary.cs
- MemberInfoSerializationHolder.cs
- TranslateTransform.cs
- MDIClient.cs
- BindingManagerDataErrorEventArgs.cs
- TTSEngineProxy.cs
- RecordsAffectedEventArgs.cs
- CornerRadius.cs
- BuildProviderCollection.cs
- Vector3DValueSerializer.cs
- TargetConverter.cs
- HttpHandlerActionCollection.cs
- ConsumerConnectionPointCollection.cs
- BaseDataBoundControl.cs
- Debug.cs
- StylusButton.cs
- WorkflowItemPresenter.cs
- Scalars.cs
- URLString.cs
- HttpConfigurationContext.cs
- ExpressionVisitorHelpers.cs
- RelationshipEndMember.cs
- TypeLoadException.cs
- CharKeyFrameCollection.cs
- Container.cs
- ExpressionVisitor.cs
- ModifierKeysValueSerializer.cs
- TextEditorSelection.cs
- InputMethodStateChangeEventArgs.cs
- MenuItemCollection.cs
- PassportPrincipal.cs
- ProcessingInstructionAction.cs
- ObsoleteAttribute.cs
- UserCancellationException.cs
- ConfigurationElementCollection.cs
- VarRemapper.cs
- TextTreeInsertUndoUnit.cs
- EndEvent.cs
- SecurityDescriptor.cs
- PrintEvent.cs
- ProfessionalColors.cs
- RolePrincipal.cs
- QueryTaskGroupState.cs
- PipelineModuleStepContainer.cs