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
- ServicePrincipalNameElement.cs
- HttpChannelBindingToken.cs
- DataTrigger.cs
- DbQueryCommandTree.cs
- QEncodedStream.cs
- DesignerForm.cs
- Stack.cs
- TraceHandler.cs
- GenericWebPart.cs
- MethodBody.cs
- X500Name.cs
- IISMapPath.cs
- NavigationProgressEventArgs.cs
- FirstMatchCodeGroup.cs
- PropertyInformationCollection.cs
- IntSecurity.cs
- MetaData.cs
- _FtpDataStream.cs
- Int64.cs
- DocumentGrid.cs
- IncrementalHitTester.cs
- RuleRef.cs
- DataGridViewComboBoxCell.cs
- ControlParameter.cs
- DocumentSequence.cs
- RequestCacheEntry.cs
- Transform.cs
- PartialTrustVisibleAssembly.cs
- TextEditorSpelling.cs
- TreeView.cs
- WebBrowserNavigatedEventHandler.cs
- LineInfo.cs
- SQLStringStorage.cs
- TypographyProperties.cs
- BamlTreeMap.cs
- OptimisticConcurrencyException.cs
- WebReferencesBuildProvider.cs
- Stack.cs
- TextFormatter.cs
- List.cs
- ViewCellRelation.cs
- ClientOperation.cs
- BidOverLoads.cs
- WindowAutomationPeer.cs
- BoundColumn.cs
- UMPAttributes.cs
- CredentialCache.cs
- COM2IPerPropertyBrowsingHandler.cs
- XsdDateTime.cs
- DBCSCodePageEncoding.cs
- GacUtil.cs
- ExpressionBuilderContext.cs
- AsymmetricKeyExchangeFormatter.cs
- SQLGuidStorage.cs
- RadioButtonAutomationPeer.cs
- DataViewSettingCollection.cs
- XmlILTrace.cs
- FilteredAttributeCollection.cs
- SmiContext.cs
- DispatcherTimer.cs
- ClonableStack.cs
- XmlObjectSerializerContext.cs
- COM2IPerPropertyBrowsingHandler.cs
- AuthorizationSection.cs
- CngAlgorithmGroup.cs
- ApplicationInfo.cs
- DataSourceView.cs
- ZipIOCentralDirectoryBlock.cs
- PositiveTimeSpanValidator.cs
- ExcCanonicalXml.cs
- PeoplePickerWrapper.cs
- ListBox.cs
- EventLogTraceListener.cs
- SpeakCompletedEventArgs.cs
- RtfControls.cs
- UpdateExpressionVisitor.cs
- CellRelation.cs
- ActivityTypeCodeDomSerializer.cs
- SetStoryboardSpeedRatio.cs
- ContainsRowNumberChecker.cs
- RegexTree.cs
- MatrixAnimationUsingKeyFrames.cs
- Panel.cs
- SettingsPropertyIsReadOnlyException.cs
- SmiContextFactory.cs
- PartitionResolver.cs
- _HeaderInfoTable.cs
- ColorConverter.cs
- DESCryptoServiceProvider.cs
- FeatureAttribute.cs
- TlsnegoTokenProvider.cs
- CodeArgumentReferenceExpression.cs
- LoginView.cs
- MsmqInputChannelListener.cs
- DataGridViewRowCollection.cs
- Base64Stream.cs
- Events.cs
- QilVisitor.cs
- MailAddressCollection.cs
- ModuleConfigurationInfo.cs