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
- MouseButton.cs
- InheritanceContextChangedEventManager.cs
- StrongTypingException.cs
- jithelpers.cs
- StubHelpers.cs
- NavigateEvent.cs
- TraceContext.cs
- SessionPageStateSection.cs
- DragDeltaEventArgs.cs
- ChameleonKey.cs
- Char.cs
- CollectionsUtil.cs
- ipaddressinformationcollection.cs
- ReversePositionQuery.cs
- Vector3DValueSerializer.cs
- EntitySetBaseCollection.cs
- ActivityStatusChangeEventArgs.cs
- WorkflowMarkupSerializer.cs
- ScriptModule.cs
- ShapeTypeface.cs
- SubqueryRules.cs
- uribuilder.cs
- SqlStream.cs
- SettingsPropertyNotFoundException.cs
- Transactions.cs
- ErrorCodes.cs
- ToolBarButton.cs
- Primitive.cs
- AliasedSlot.cs
- CancelEventArgs.cs
- Queue.cs
- XmlIlVisitor.cs
- UniqueIdentifierService.cs
- ValidationRule.cs
- dataprotectionpermission.cs
- QuaternionIndependentAnimationStorage.cs
- JavaScriptSerializer.cs
- SqlCacheDependencyDatabase.cs
- XamlStackWriter.cs
- TdsParameterSetter.cs
- SmtpSection.cs
- DialogDivider.cs
- TerminateSequenceResponse.cs
- CheckPair.cs
- FamilyTypefaceCollection.cs
- BaseTemplateParser.cs
- AssemblyBuilderData.cs
- PrtTicket_Base.cs
- DelegateInArgument.cs
- ClassDataContract.cs
- SerializationHelper.cs
- ConstraintConverter.cs
- TiffBitmapEncoder.cs
- UIElement.cs
- TextEvent.cs
- PageBuildProvider.cs
- BehaviorEditorPart.cs
- ConnectionPointCookie.cs
- latinshape.cs
- ObjectKeyFrameCollection.cs
- WebPartConnectionCollection.cs
- TargetConverter.cs
- SiteMapNodeItem.cs
- GeometryConverter.cs
- SmiRequestExecutor.cs
- FlowDocumentReaderAutomationPeer.cs
- VerificationException.cs
- IItemProperties.cs
- PngBitmapDecoder.cs
- StorageConditionPropertyMapping.cs
- AnnotationService.cs
- RuntimeArgumentHandle.cs
- KeyboardNavigation.cs
- CacheDependency.cs
- PathFigure.cs
- ListViewDataItem.cs
- ComponentEvent.cs
- OperandQuery.cs
- ListBoxItemWrapperAutomationPeer.cs
- MembershipSection.cs
- DbProviderFactoriesConfigurationHandler.cs
- EntityConnectionStringBuilderItem.cs
- List.cs
- NGCSerializationManager.cs
- baseaxisquery.cs
- XPathSelfQuery.cs
- Walker.cs
- PriorityQueue.cs
- FileSecurity.cs
- XmlReader.cs
- LazyTextWriterCreator.cs
- SqlStream.cs
- DbExpressionVisitor_TResultType.cs
- WindowsEditBoxRange.cs
- DbgUtil.cs
- PropertyChangedEventArgs.cs
- NavigationEventArgs.cs
- RootBrowserWindow.cs
- WebProxyScriptElement.cs
- ConfigurationValue.cs