Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Base / MS / Internal / BaseHashHelper.cs / 1305600 / 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) { 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
- MaterialGroup.cs
- LinkButton.cs
- CaseKeyBox.xaml.cs
- DataTemplateSelector.cs
- ProfileInfo.cs
- PngBitmapDecoder.cs
- sqlinternaltransaction.cs
- XmlWrappingWriter.cs
- HexParser.cs
- RequestCachePolicyConverter.cs
- OlePropertyStructs.cs
- DefaultObjectSerializer.cs
- LayoutEngine.cs
- QuaternionRotation3D.cs
- HtmlInputControl.cs
- WinInetCache.cs
- SelectionProcessor.cs
- RoutingConfiguration.cs
- OperationValidationEventArgs.cs
- SystemIPInterfaceStatistics.cs
- ExternalException.cs
- ClientScriptManagerWrapper.cs
- DbParameterHelper.cs
- XmlReflectionImporter.cs
- DataObjectAttribute.cs
- PrintPreviewControl.cs
- ZoneMembershipCondition.cs
- XamlTypeMapper.cs
- CellParagraph.cs
- PreviewPrintController.cs
- WorkflowOperationAsyncResult.cs
- PackageDigitalSignatureManager.cs
- TextWriter.cs
- Avt.cs
- XmlTextAttribute.cs
- CodeDesigner.cs
- QuaternionKeyFrameCollection.cs
- DEREncoding.cs
- Fault.cs
- NameValuePair.cs
- WebPartPersonalization.cs
- SystemParameters.cs
- PerformanceCounterManager.cs
- MarkupWriter.cs
- SplitContainer.cs
- CreateUserErrorEventArgs.cs
- CodeCompileUnit.cs
- SubtreeProcessor.cs
- NativeObjectSecurity.cs
- Visual3D.cs
- AdapterDictionary.cs
- LockRecursionException.cs
- TypeExtension.cs
- FixedHyperLink.cs
- OperationDescription.cs
- IOThreadTimer.cs
- DetailsViewCommandEventArgs.cs
- ChooseAction.cs
- DataGridViewIntLinkedList.cs
- SoundPlayerAction.cs
- DataBindEngine.cs
- XmlSchemaChoice.cs
- LocatorGroup.cs
- FrameworkContextData.cs
- GridViewDeleteEventArgs.cs
- PnrpPermission.cs
- FileUpload.cs
- HttpInputStream.cs
- DataGridViewRowStateChangedEventArgs.cs
- SizeF.cs
- DeploymentSectionCache.cs
- SolidColorBrush.cs
- DispatcherExceptionEventArgs.cs
- xml.cs
- ResXResourceSet.cs
- ButtonAutomationPeer.cs
- ViewSimplifier.cs
- BitmapEffectInput.cs
- SlotInfo.cs
- LongCountAggregationOperator.cs
- EntryWrittenEventArgs.cs
- ClientScriptManager.cs
- RemoteWebConfigurationHostServer.cs
- PerfCounterSection.cs
- DocumentCollection.cs
- FilterFactory.cs
- AxHostDesigner.cs
- DataControlLinkButton.cs
- RequestCache.cs
- HashAlgorithm.cs
- PixelFormat.cs
- webclient.cs
- Context.cs
- PersianCalendar.cs
- ExpressionNormalizer.cs
- SelectedGridItemChangedEvent.cs
- StateManagedCollection.cs
- FusionWrap.cs
- ComponentConverter.cs
- DocumentViewer.cs