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
- VarRemapper.cs
- DiscardableAttribute.cs
- DocumentPage.cs
- OdbcFactory.cs
- StandardBindingElement.cs
- PopupControlService.cs
- BitmapSource.cs
- MailBnfHelper.cs
- RequestQueue.cs
- Calendar.cs
- WebPartCollection.cs
- CompilationRelaxations.cs
- FlowLayoutSettings.cs
- CustomValidator.cs
- ExtenderProvidedPropertyAttribute.cs
- DetailsViewUpdateEventArgs.cs
- SecurityVerifiedMessage.cs
- SizeAnimationClockResource.cs
- PassportAuthenticationModule.cs
- SkinBuilder.cs
- Trace.cs
- XmlCharCheckingReader.cs
- EntityDataSourceContextDisposingEventArgs.cs
- RoleGroupCollectionEditor.cs
- CryptoHelper.cs
- XmlSchemaImport.cs
- DBAsyncResult.cs
- SharedStream.cs
- MediaCommands.cs
- DataGrid.cs
- listviewsubitemcollectioneditor.cs
- FreezableDefaultValueFactory.cs
- lengthconverter.cs
- WebPartMenuStyle.cs
- WebPartConnectionsCancelEventArgs.cs
- StagingAreaInputItem.cs
- wmiutil.cs
- DesignerActionUI.cs
- SystemIcmpV4Statistics.cs
- PasswordBoxAutomationPeer.cs
- HttpValueCollection.cs
- JsonXmlDataContract.cs
- GridViewCancelEditEventArgs.cs
- MemberExpression.cs
- MediaEntryAttribute.cs
- CheckBoxBaseAdapter.cs
- GroupBoxRenderer.cs
- RadioButtonFlatAdapter.cs
- BrowsableAttribute.cs
- NameNode.cs
- _NTAuthentication.cs
- XmlToDatasetMap.cs
- MasterPage.cs
- NamespaceEmitter.cs
- XhtmlTextWriter.cs
- FrugalMap.cs
- SafeNativeMethods.cs
- UnmanagedMarshal.cs
- XmlDataSource.cs
- EntityDataSourceStatementEditorForm.cs
- figurelength.cs
- GuidTagList.cs
- ObjectIDGenerator.cs
- ConfigXmlCDataSection.cs
- PaperSource.cs
- CodeTypeParameterCollection.cs
- SchemaImporter.cs
- StringConverter.cs
- PreProcessor.cs
- Statements.cs
- SafeHandles.cs
- MethodImplAttribute.cs
- BaseCodeDomTreeGenerator.cs
- SourceSwitch.cs
- LinqExpressionNormalizer.cs
- MemberProjectionIndex.cs
- StrongNameKeyPair.cs
- Tag.cs
- ViewSimplifier.cs
- DataGridViewUtilities.cs
- SqlMetaData.cs
- UriSection.cs
- Thread.cs
- CommonObjectSecurity.cs
- HMACRIPEMD160.cs
- XmlObjectSerializerContext.cs
- UserMapPath.cs
- SafeTokenHandle.cs
- TraceSection.cs
- DoubleLinkList.cs
- CodeGroup.cs
- ListControl.cs
- InstanceKeyNotReadyException.cs
- DataError.cs
- GlobalizationAssembly.cs
- FocusWithinProperty.cs
- User.cs
- NumberAction.cs
- TextRangeEditTables.cs
- StateBag.cs