Code:
/ DotNET / DotNET / 8.0 / untmp / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / Base / MS / Internal / BaseHashHelper.cs / 2 / BaseHashHelper.cs
//---------------------------------------------------------------------------- // //// Copyright (C) 2003 by Microsoft Corporation. All rights reserved. // // // // Description: Static class to help work around hashing-related bugs. // //--------------------------------------------------------------------------- using System; using System.Reflection; // Assembly using System.Collections.Specialized; // HybridDictionary using MS.Internal.WindowsBase; // [FriendAccessAllowed] namespace MS.Internal { [FriendAccessAllowed] // defined in Base, used in Core and Framework internal static class BaseHashHelper { static BaseHashHelper() { // register bad types from WindowsBase MS.Internal.Hashing.WindowsBase.HashHelper.Initialize(); } [FriendAccessAllowed] // defined in Base, used in Core and Framework internal static void RegisterTypes(Assembly assembly, Type[] types) { HybridDictionary dictionary = DictionaryFromList(types); lock(_table) { _table[assembly] = dictionary; } } // Some types don't have reliable hash codes - the hashcode can change // during the lifetime of an object of that type. Such an object cannot // be used as the key of a hashtable or dictionary. This is where we // detect such objects, so the caller can find some other way to cope. [FriendAccessAllowed] // defined in Base, used in Core and Framework internal static bool HasReliableHashCode(object item) { // null doesn't actually have a hashcode at all. This method can be // called with a representative item from a collection - if the // representative is null, we'll be pessimistic and assume the // items in the collection should not be hashed. if (item == null) return false; Type type = item.GetType(); Assembly assembly = type.Assembly; HybridDictionary dictionary; lock(_table) { dictionary = (HybridDictionary)_table[assembly]; } if (dictionary == null) { // if we don't have an entry for the object's assembly, // see if we know something about the assembly /* no external types on the `blacklist any more if (type.Namespace == "System.Data" && IsSystemData(assembly)) { dictionary = TypesForSystemData(); } else */ { // if we don't know anything about the assembly, give it an // empty dictionary. This makes future lookups fast. We just // have to hope that every type in the assembly has reliable // hashcodes. dictionary = new HybridDictionary(); } lock(_table) { _table[assembly] = dictionary; } } return !dictionary.Contains(type); } // populate a dictionary from the given list private static HybridDictionary DictionaryFromList(Type[] types) { HybridDictionary dictionary = new HybridDictionary(types.Length); for (int i=0; i
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- TextHidden.cs
- CodeStatementCollection.cs
- HtmlTableRow.cs
- SplitterCancelEvent.cs
- DataGridColumnReorderingEventArgs.cs
- UIAgentMonitorHandle.cs
- SqlCacheDependencyDatabaseCollection.cs
- ReachFixedDocumentSerializerAsync.cs
- XmlQueryType.cs
- WebBrowserHelper.cs
- TrackingProfileCache.cs
- MultiPageTextView.cs
- RijndaelManaged.cs
- MDIClient.cs
- BuildProvidersCompiler.cs
- COM2Enum.cs
- XsltQilFactory.cs
- MemoryFailPoint.cs
- StylusButtonCollection.cs
- InputGestureCollection.cs
- ConditionCollection.cs
- LinearQuaternionKeyFrame.cs
- SystemInfo.cs
- ListItemsCollectionEditor.cs
- ScriptIgnoreAttribute.cs
- WebResponse.cs
- SqlServices.cs
- QilChoice.cs
- BufferedGraphicsManager.cs
- ReaderWriterLockWrapper.cs
- DataGridDesigner.cs
- DrawingContext.cs
- DispatchChannelSink.cs
- AssociationTypeEmitter.cs
- ChannelTerminatedException.cs
- IgnoreSectionHandler.cs
- ChangeProcessor.cs
- NullableConverter.cs
- NameValuePermission.cs
- Simplifier.cs
- InternalBufferOverflowException.cs
- FixedSOMPageConstructor.cs
- XmlName.cs
- ListSortDescriptionCollection.cs
- ServicesExceptionNotHandledEventArgs.cs
- ViewStateChangedEventArgs.cs
- WebException.cs
- SubstitutionList.cs
- SecurityAlgorithmSuite.cs
- ShutDownListener.cs
- ClientSettingsSection.cs
- CodeTypeDeclaration.cs
- HttpHandlersSection.cs
- ToolStripComboBox.cs
- _LazyAsyncResult.cs
- DocumentViewerConstants.cs
- DecimalConverter.cs
- Html32TextWriter.cs
- LowerCaseStringConverter.cs
- PermissionListSet.cs
- FixedTextBuilder.cs
- EnumerableRowCollectionExtensions.cs
- BamlRecordHelper.cs
- MessageEventSubscriptionService.cs
- DbMetaDataFactory.cs
- ConfigurationValue.cs
- DesignTable.cs
- PropertyPathWorker.cs
- DataRowChangeEvent.cs
- HttpResponseWrapper.cs
- ClientBuildManagerCallback.cs
- MetadataUtil.cs
- PixelShader.cs
- DbConnectionInternal.cs
- WsdlInspector.cs
- ResourceReader.cs
- XsltLibrary.cs
- XmlReader.cs
- XmlSerializerNamespaces.cs
- MappingSource.cs
- KeyValueConfigurationCollection.cs
- HtmlEmptyTagControlBuilder.cs
- DeviceSpecific.cs
- LogicalExpressionEditor.cs
- EventRecordWrittenEventArgs.cs
- ColorAnimationUsingKeyFrames.cs
- HitTestDrawingContextWalker.cs
- LogEntry.cs
- ToolTipAutomationPeer.cs
- OpenTypeLayoutCache.cs
- ScriptReferenceBase.cs
- DbCommandDefinition.cs
- SocketInformation.cs
- PopupRootAutomationPeer.cs
- ArraySegment.cs
- Panel.cs
- WebPartDescriptionCollection.cs
- ActivityValidationServices.cs
- BuiltInPermissionSets.cs
- ColorContext.cs