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_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];
}
}
}
}
// 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
- ErrorLog.cs
- AVElementHelper.cs
- SafeCertificateStore.cs
- TextLineResult.cs
- ItemDragEvent.cs
- ParsedAttributeCollection.cs
- ThemeableAttribute.cs
- FtpWebRequest.cs
- EntityContainer.cs
- AffineTransform3D.cs
- OdbcDataReader.cs
- EncoderFallback.cs
- TypedLocationWrapper.cs
- ClientScriptManager.cs
- DesignerEditorPartChrome.cs
- RightsManagementInformation.cs
- SelectionEditingBehavior.cs
- safelinkcollection.cs
- ContextInformation.cs
- TrackingMemoryStreamFactory.cs
- AtomContentProperty.cs
- StorageComplexPropertyMapping.cs
- EmbossBitmapEffect.cs
- EasingFunctionBase.cs
- ThrowHelper.cs
- ComPlusInstanceProvider.cs
- StringInfo.cs
- WeakEventTable.cs
- HtmlTextBoxAdapter.cs
- MailHeaderInfo.cs
- FormViewInsertEventArgs.cs
- DataGridViewIntLinkedList.cs
- AsyncMethodInvoker.cs
- SqlAggregateChecker.cs
- DesignBindingEditor.cs
- ProtocolViolationException.cs
- infer.cs
- EtwTrace.cs
- HttpCachePolicy.cs
- CheckBoxList.cs
- AtomicFile.cs
- FlatButtonAppearance.cs
- COM2Enum.cs
- BooleanSwitch.cs
- PeerNameRecord.cs
- DetailsViewRow.cs
- TextFormatterHost.cs
- ChannelTokenTypeConverter.cs
- NoResizeSelectionBorderGlyph.cs
- DataGridLinkButton.cs
- StorageMappingItemCollection.cs
- SqlConnectionString.cs
- NullableIntAverageAggregationOperator.cs
- WebResourceUtil.cs
- DefaultValueTypeConverter.cs
- DataListGeneralPage.cs
- mediapermission.cs
- BasicExpressionVisitor.cs
- CmsInterop.cs
- Int64Storage.cs
- ActionMessageFilterTable.cs
- ArrayListCollectionBase.cs
- Root.cs
- PrivilegeNotHeldException.cs
- TraversalRequest.cs
- ObjectParameter.cs
- FileRegion.cs
- CryptoStream.cs
- UrlMappingsSection.cs
- Model3DGroup.cs
- NativeMethods.cs
- RMEnrollmentPage3.cs
- DateTimeValueSerializer.cs
- MimeFormReflector.cs
- InstanceDataCollectionCollection.cs
- BamlTreeMap.cs
- SizeLimitedCache.cs
- HttpProfileGroupBase.cs
- ConstructorArgumentAttribute.cs
- MdImport.cs
- PartitionResolver.cs
- UpdateTracker.cs
- HtmlInputFile.cs
- DocumentPageHost.cs
- AssemblyResourceLoader.cs
- ModelServiceImpl.cs
- ExportOptions.cs
- XPathNode.cs
- TextContainerChangeEventArgs.cs
- RelationshipManager.cs
- PerformanceCountersElement.cs
- followingquery.cs
- ZipIOCentralDirectoryDigitalSignature.cs
- HandlerMappingMemo.cs
- IdentitySection.cs
- GlobalizationAssembly.cs
- AccessControlEntry.cs
- CompositeControl.cs
- Light.cs
- BuildManager.cs