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
- AbandonedMutexException.cs
- MethodExecutor.cs
- MessageSmuggler.cs
- DataServiceConfiguration.cs
- DataGridViewCellErrorTextNeededEventArgs.cs
- BitmapEffectDrawing.cs
- EntityDataSourceColumn.cs
- HttpCacheVaryByContentEncodings.cs
- DateBoldEvent.cs
- SecurityException.cs
- VisualStyleRenderer.cs
- SqlLiftIndependentRowExpressions.cs
- XmlWellformedWriter.cs
- SecurityContext.cs
- PathFigure.cs
- NativeMethods.cs
- BaseDataListPage.cs
- EventsTab.cs
- RelationshipSet.cs
- SystemParameters.cs
- LambdaExpression.cs
- TrustSection.cs
- Compilation.cs
- TextTrailingCharacterEllipsis.cs
- OleDbInfoMessageEvent.cs
- SecurityManager.cs
- RequestCache.cs
- NonBatchDirectoryCompiler.cs
- WebServiceMethodData.cs
- FormsAuthenticationModule.cs
- SafeMarshalContext.cs
- ResourceProviderFactory.cs
- DropShadowEffect.cs
- ChtmlTextWriter.cs
- FontFamilyIdentifier.cs
- SmtpLoginAuthenticationModule.cs
- RectangleConverter.cs
- CopyOnWriteList.cs
- SafePointer.cs
- PersonalizationDictionary.cs
- PersonalizableAttribute.cs
- Button.cs
- SwitchExpression.cs
- ErasingStroke.cs
- MulticastNotSupportedException.cs
- XLinq.cs
- InstanceHandleConflictException.cs
- LocatorGroup.cs
- SharedPerformanceCounter.cs
- LayoutSettings.cs
- StateMachineDesignerPaint.cs
- StylusPointCollection.cs
- MonthCalendarDesigner.cs
- VectorCollectionValueSerializer.cs
- UpdateDelegates.Generated.cs
- GridItem.cs
- XmlSchemaAny.cs
- ConfigurationManager.cs
- MILUtilities.cs
- EventProviderWriter.cs
- ImageFormatConverter.cs
- StorageFunctionMapping.cs
- XamlToRtfParser.cs
- RadioButtonFlatAdapter.cs
- InstalledVoice.cs
- TextFormatterHost.cs
- StringConcat.cs
- DeviceContext.cs
- ThumbAutomationPeer.cs
- ClientCultureInfo.cs
- CompilerCollection.cs
- MenuBase.cs
- IntegrationExceptionEventArgs.cs
- WindowsListViewSubItem.cs
- FormsAuthenticationEventArgs.cs
- DispatcherExceptionEventArgs.cs
- ButtonAutomationPeer.cs
- DynamicDataManager.cs
- RangeBaseAutomationPeer.cs
- EntityProxyTypeInfo.cs
- Multiply.cs
- XsdDataContractExporter.cs
- CustomBindingElement.cs
- OdbcConnectionHandle.cs
- SqlDataSourceAdvancedOptionsForm.cs
- Item.cs
- EndpointAddressProcessor.cs
- XmlIgnoreAttribute.cs
- DesignerSerializerAttribute.cs
- FrameSecurityDescriptor.cs
- QEncodedStream.cs
- DetailsViewUpdatedEventArgs.cs
- VerificationAttribute.cs
- FunctionUpdateCommand.cs
- ListControl.cs
- DrawingBrush.cs
- Solver.cs
- SettingsSection.cs
- QueryStringParameter.cs
- PropertyDescriptorCollection.cs