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
- SequenceFullException.cs
- MeasureItemEvent.cs
- ArrayExtension.cs
- HttpCachePolicyWrapper.cs
- NullReferenceException.cs
- XpsFont.cs
- ContentFilePart.cs
- serverconfig.cs
- MenuItemAutomationPeer.cs
- unsafeIndexingFilterStream.cs
- FileCodeGroup.cs
- AccessViolationException.cs
- CompatibleIComparer.cs
- TableCell.cs
- BinaryNode.cs
- GridViewUpdateEventArgs.cs
- ClientBuildManager.cs
- UpdateExpressionVisitor.cs
- CompositeControl.cs
- HttpContextServiceHost.cs
- OdbcConnectionFactory.cs
- TextRunProperties.cs
- VirtualPathUtility.cs
- IntSecurity.cs
- ToolStripDropDownDesigner.cs
- ClientTargetCollection.cs
- ConfigXmlCDataSection.cs
- XPathPatternParser.cs
- AbandonedMutexException.cs
- ControlEvent.cs
- UserPersonalizationStateInfo.cs
- CompiledQueryCacheEntry.cs
- UnmanagedBitmapWrapper.cs
- SystemIPAddressInformation.cs
- FormParameter.cs
- DaylightTime.cs
- SecureStringHasher.cs
- DocumentsTrace.cs
- X509CertificateValidator.cs
- LinqToSqlWrapper.cs
- WorkflowExecutor.cs
- ToolStripTemplateNode.cs
- CompoundFileStreamReference.cs
- XpsViewerException.cs
- KeyboardInputProviderAcquireFocusEventArgs.cs
- Timeline.cs
- DESCryptoServiceProvider.cs
- assemblycache.cs
- Triplet.cs
- Odbc32.cs
- DispatchOperation.cs
- NullableDecimalAverageAggregationOperator.cs
- HtmlFormParameterReader.cs
- TextRangeEdit.cs
- ServiceMetadataBehavior.cs
- SchemaCollectionCompiler.cs
- PermissionSetEnumerator.cs
- TreeNodeCollection.cs
- PointAnimationBase.cs
- XmlValueConverter.cs
- TextServicesManager.cs
- Merger.cs
- LocalizableAttribute.cs
- ConfigXmlReader.cs
- OperationContractAttribute.cs
- NotifyIcon.cs
- WorkflowInstanceRecord.cs
- XmlEntityReference.cs
- TdsParser.cs
- MsmqIntegrationBindingCollectionElement.cs
- ExpressionBuilder.cs
- SiteMapDataSourceView.cs
- DbProviderManifest.cs
- XmlRawWriter.cs
- BindValidationContext.cs
- ExpressionBuilderCollection.cs
- TableStyle.cs
- UIElementCollection.cs
- OdbcInfoMessageEvent.cs
- dataprotectionpermissionattribute.cs
- SemanticAnalyzer.cs
- LogRestartAreaEnumerator.cs
- EdmFunctions.cs
- Command.cs
- GraphicsContext.cs
- DynamicMetaObjectBinder.cs
- TableDetailsCollection.cs
- ElementHost.cs
- ComponentChangingEvent.cs
- NodeLabelEditEvent.cs
- Rect3DValueSerializer.cs
- HttpUnhandledOperationInvoker.cs
- VirtualPathExtension.cs
- Math.cs
- PointLight.cs
- Condition.cs
- JapaneseCalendar.cs
- FilterException.cs
- JpegBitmapDecoder.cs
- ChooseAction.cs