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
- ContentPosition.cs
- RsaSecurityToken.cs
- OperationResponse.cs
- SystemUnicastIPAddressInformation.cs
- SplineKeyFrames.cs
- ToolStripContainer.cs
- CompareValidator.cs
- CollectionBase.cs
- HostingEnvironmentException.cs
- InputBindingCollection.cs
- DataListCommandEventArgs.cs
- StylusLogic.cs
- ResolveMatchesCD1.cs
- ParameterRetriever.cs
- GeneralTransformCollection.cs
- ComponentRenameEvent.cs
- NativeMethods.cs
- PhysicalFontFamily.cs
- ChildTable.cs
- TypeConverterHelper.cs
- ContainerControlDesigner.cs
- DocumentSequence.cs
- SubqueryTrackingVisitor.cs
- CompositeFontParser.cs
- DetailsViewPagerRow.cs
- Int16Animation.cs
- ContractsBCL.cs
- ValidationPropertyAttribute.cs
- TextViewSelectionProcessor.cs
- SiteMapDesignerDataSourceView.cs
- OleDbParameterCollection.cs
- HitTestFilterBehavior.cs
- EntityDataSourceReferenceGroup.cs
- SafeSecurityHandles.cs
- SchemaConstraints.cs
- ValueChangedEventManager.cs
- OutputCache.cs
- ClientFormsIdentity.cs
- CodeCompiler.cs
- ShaperBuffers.cs
- BlobPersonalizationState.cs
- UniformGrid.cs
- KeyFrames.cs
- EpmContentSerializerBase.cs
- Freezable.cs
- TextBox.cs
- EntitySqlException.cs
- ImageListStreamer.cs
- IntMinMaxAggregationOperator.cs
- RayMeshGeometry3DHitTestResult.cs
- mactripleDES.cs
- PeerTransportListenAddressValidatorAttribute.cs
- BorderGapMaskConverter.cs
- PersonalizationProvider.cs
- TreeWalkHelper.cs
- EventTrigger.cs
- EnterpriseServicesHelper.cs
- HttpCookieCollection.cs
- OleDbWrapper.cs
- FontResourceCache.cs
- GuidConverter.cs
- StrokeNode.cs
- FlowSwitchDesigner.xaml.cs
- ProgressPage.cs
- InputEventArgs.cs
- Validator.cs
- ServiceChannelFactory.cs
- DataGridViewCellContextMenuStripNeededEventArgs.cs
- OrderByQueryOptionExpression.cs
- EventLogLink.cs
- SolidBrush.cs
- connectionpool.cs
- IconConverter.cs
- AttachedPropertyMethodSelector.cs
- IsolatedStorage.cs
- DataSetMappper.cs
- SqlCacheDependency.cs
- SqlDataSource.cs
- XmlILConstructAnalyzer.cs
- RelatedEnd.cs
- StringUtil.cs
- PreApplicationStartMethodAttribute.cs
- ScriptReferenceEventArgs.cs
- CqlQuery.cs
- FlowDocumentPaginator.cs
- SymmetricKeyWrap.cs
- CompileLiteralTextParser.cs
- XNodeNavigator.cs
- FilterableAttribute.cs
- ClientRolePrincipal.cs
- AutoGeneratedField.cs
- OleDbReferenceCollection.cs
- HtmlImage.cs
- EventSourceCreationData.cs
- ConstantProjectedSlot.cs
- AnchoredBlock.cs
- ObjectDataSourceView.cs
- EventRouteFactory.cs
- DockPattern.cs
- SparseMemoryStream.cs