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
- AppSettingsSection.cs
- Attributes.cs
- ListViewUpdatedEventArgs.cs
- SchemaCompiler.cs
- State.cs
- RegexFCD.cs
- WebPartCloseVerb.cs
- ParameterRefs.cs
- SqlReorderer.cs
- PeerName.cs
- StoreContentChangedEventArgs.cs
- PageStatePersister.cs
- AddInStore.cs
- VisualProxy.cs
- AdapterUtil.cs
- SerializationObjectManager.cs
- mansign.cs
- GPPOINTF.cs
- AssemblyHash.cs
- EntityDataSourceColumn.cs
- BindToObject.cs
- EntityCollection.cs
- ToggleProviderWrapper.cs
- WebPartConnectionsCancelVerb.cs
- FontCacheUtil.cs
- FtpCachePolicyElement.cs
- ProcessHostFactoryHelper.cs
- StylusLogic.cs
- login.cs
- FixedSOMPage.cs
- RpcCryptoContext.cs
- AccessControlEntry.cs
- EntityModelSchemaGenerator.cs
- TemplateColumn.cs
- X509ChainPolicy.cs
- DelayedRegex.cs
- NameValuePair.cs
- figurelength.cs
- DiscoveryClientElement.cs
- DispatcherHooks.cs
- KeyedCollection.cs
- QilLiteral.cs
- DataGridViewRowsAddedEventArgs.cs
- OuterGlowBitmapEffect.cs
- While.cs
- PagerSettings.cs
- AtlasWeb.Designer.cs
- StaticResourceExtension.cs
- HwndTarget.cs
- RepeaterDataBoundAdapter.cs
- FillErrorEventArgs.cs
- DeviceContexts.cs
- AutomationInteropProvider.cs
- SecurityTokenAuthenticator.cs
- ComplusEndpointConfigContainer.cs
- Pens.cs
- PrintSchema.cs
- FaultDescriptionCollection.cs
- FileSystemWatcher.cs
- ADConnectionHelper.cs
- ClipboardProcessor.cs
- ArrangedElementCollection.cs
- Profiler.cs
- EdgeModeValidation.cs
- ObjectQuery.cs
- InkPresenter.cs
- SubtreeProcessor.cs
- XmlValidatingReaderImpl.cs
- AssociationTypeEmitter.cs
- ConnectionManagementElementCollection.cs
- XmlSiteMapProvider.cs
- Cell.cs
- SplineKeyFrames.cs
- ServicesUtilities.cs
- EventMappingSettingsCollection.cs
- MembershipSection.cs
- DurableInstance.cs
- InkCanvasFeedbackAdorner.cs
- DateTimeConverter.cs
- Enum.cs
- DataRelation.cs
- DataPagerFieldCollection.cs
- CacheVirtualItemsEvent.cs
- SetterBaseCollection.cs
- DbTransaction.cs
- PingReply.cs
- LineVisual.cs
- RelationshipType.cs
- SmtpNegotiateAuthenticationModule.cs
- CompilationUnit.cs
- CodeConstructor.cs
- PostBackTrigger.cs
- SQLUtility.cs
- SizeF.cs
- TextTreeRootTextBlock.cs
- DelegateBodyWriter.cs
- MonthChangedEventArgs.cs
- PersonalizationProvider.cs
- DefaultShape.cs
- DesignTimeResourceProviderFactoryAttribute.cs