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_currItem
Object 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
- DataConnectionHelper.cs
- WindowsScrollBar.cs
- ZeroOpNode.cs
- FillRuleValidation.cs
- DataControlCommands.cs
- WebPartActionVerb.cs
- XmlDeclaration.cs
- AnonymousIdentificationModule.cs
- DNS.cs
- MSAAWinEventWrap.cs
- PropertyBuilder.cs
- HandleValueEditor.cs
- BitSet.cs
- Array.cs
- XmlQueryRuntime.cs
- shaper.cs
- RSAOAEPKeyExchangeFormatter.cs
- MSAAEventDispatcher.cs
- HashAlgorithm.cs
- InlineUIContainer.cs
- ProviderCommandInfoUtils.cs
- DependencyProperty.cs
- Command.cs
- AttachedAnnotation.cs
- ObjectQuery_EntitySqlExtensions.cs
- TerminatorSinks.cs
- UserNameSecurityToken.cs
- TextEncodedRawTextWriter.cs
- AmbientLight.cs
- StringComparer.cs
- EntityDataSourceReferenceGroup.cs
- AssemblyInfo.cs
- MsmqIntegrationReceiveParameters.cs
- IgnoreSectionHandler.cs
- ListBindingConverter.cs
- ClientBuildManagerCallback.cs
- DbProviderSpecificTypePropertyAttribute.cs
- CacheDependency.cs
- safelink.cs
- PassportIdentity.cs
- SessionSwitchEventArgs.cs
- ContextStaticAttribute.cs
- SwitchElementsCollection.cs
- RouteTable.cs
- XmlAnyElementAttributes.cs
- GenericWebPart.cs
- RegexMatchCollection.cs
- Size3DValueSerializer.cs
- MaskedTextBoxDesigner.cs
- CodeDirectiveCollection.cs
- SecurityMessageProperty.cs
- Vector3DCollectionConverter.cs
- CompositeActivityMarkupSerializer.cs
- XmlWriter.cs
- EdmFunctions.cs
- Decoder.cs
- GridViewRow.cs
- XmlDesigner.cs
- DesignerActionGlyph.cs
- KeyToListMap.cs
- ChangePasswordAutoFormat.cs
- QuaternionKeyFrameCollection.cs
- StatusBarItemAutomationPeer.cs
- MapPathBasedVirtualPathProvider.cs
- EventArgs.cs
- StringOutput.cs
- LineBreak.cs
- Classification.cs
- EventMetadata.cs
- TextSchema.cs
- NonClientArea.cs
- EventEntry.cs
- BindMarkupExtensionSerializer.cs
- LicenseProviderAttribute.cs
- DetailsViewInsertEventArgs.cs
- XamlBrushSerializer.cs
- CharAnimationBase.cs
- ImageAutomationPeer.cs
- GorillaCodec.cs
- AnnotationStore.cs
- PointConverter.cs
- Guid.cs
- PrivateUnsafeNativeCompoundFileMethods.cs
- _FixedSizeReader.cs
- UnauthorizedWebPart.cs
- SchemaTypeEmitter.cs
- OleDbInfoMessageEvent.cs
- ExceptionHandlers.cs
- WaitHandleCannotBeOpenedException.cs
- ScaleTransform3D.cs
- ReadOnlyPermissionSet.cs
- documentsequencetextcontainer.cs
- FormatterConverter.cs
- FrameworkContextData.cs
- DynamicActivityTypeDescriptor.cs
- ServiceNameCollection.cs
- AutomationPropertyInfo.cs
- MailHeaderInfo.cs
- cookiecollection.cs
- ThrowHelper.cs