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
- PropertyEmitter.cs
- WebPartDisplayMode.cs
- TypeElement.cs
- TraceSection.cs
- Rule.cs
- WSSecurityOneDotOneReceiveSecurityHeader.cs
- SelectedDatesCollection.cs
- WindowShowOrOpenTracker.cs
- RegexGroupCollection.cs
- DynamicDataResources.Designer.cs
- InternalConfigEventArgs.cs
- CompiledRegexRunner.cs
- QueryCacheManager.cs
- RuleValidation.cs
- ScrollChrome.cs
- DeliveryRequirementsAttribute.cs
- Native.cs
- OSFeature.cs
- ClientTargetCollection.cs
- ReceiveReply.cs
- WebSysDefaultValueAttribute.cs
- MetafileHeaderWmf.cs
- Fonts.cs
- DerivedKeySecurityToken.cs
- CancellationTokenSource.cs
- UserValidatedEventArgs.cs
- DatatypeImplementation.cs
- CodeSnippetCompileUnit.cs
- ExecutedRoutedEventArgs.cs
- KeyGestureConverter.cs
- XmlSchemaInfo.cs
- BaseTreeIterator.cs
- OdbcDataReader.cs
- PeerTransportListenAddressValidator.cs
- BitmapEffectCollection.cs
- ZipFileInfo.cs
- XmlSchemaSubstitutionGroup.cs
- XmlException.cs
- QueryAccessibilityHelpEvent.cs
- ContentElementCollection.cs
- WorkflowApplicationAbortedEventArgs.cs
- OleDbDataReader.cs
- ButtonFlatAdapter.cs
- DetailsViewDeleteEventArgs.cs
- HandlerMappingMemo.cs
- RequestCacheValidator.cs
- Optimizer.cs
- CommonGetThemePartSize.cs
- Parsers.cs
- UIAgentCrashedException.cs
- DbSetClause.cs
- NGCPageContentCollectionSerializerAsync.cs
- ButtonPopupAdapter.cs
- ChangeDirector.cs
- TrackingRecord.cs
- TabItemAutomationPeer.cs
- QilStrConcat.cs
- mediaeventshelper.cs
- SHA512Managed.cs
- ApplicationSettingsBase.cs
- WebResponse.cs
- Vector3DKeyFrameCollection.cs
- EmbeddedMailObjectsCollection.cs
- IntegerValidatorAttribute.cs
- ConstrainedDataObject.cs
- InputManager.cs
- ActivationArguments.cs
- CodeTypeReference.cs
- ArithmeticException.cs
- Compiler.cs
- DefaultDialogButtons.cs
- SignerInfo.cs
- TranslateTransform3D.cs
- ITextView.cs
- OutgoingWebRequestContext.cs
- ZipPackage.cs
- XmlUnspecifiedAttribute.cs
- TrustManagerMoreInformation.cs
- EndpointDesigner.cs
- TimeIntervalCollection.cs
- ClientCredentials.cs
- EntityViewGenerationAttribute.cs
- AuthenticationException.cs
- PartBasedPackageProperties.cs
- _NegoState.cs
- UnknownBitmapDecoder.cs
- SqlCacheDependencyDatabase.cs
- COM2TypeInfoProcessor.cs
- SiteMapPathDesigner.cs
- MobileFormsAuthentication.cs
- SpotLight.cs
- DefaultEventAttribute.cs
- Lease.cs
- LogLogRecord.cs
- SqlDataRecord.cs
- DataGridViewSelectedRowCollection.cs
- ArrayConverter.cs
- DeferredReference.cs
- AtomEntry.cs
- RestHandler.cs