Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Framework / MS / Internal / Data / SortFieldComparer.cs / 1305600 / SortFieldComparer.cs
//---------------------------------------------------------------------------- // //// Copyright (C) 2003 by Microsoft Corporation. All rights reserved. // // // // Description: IComparer class to sort by class property value (using reflection). // // See spec at http://avalon/connecteddata/M5%20Specs/IDataCollection.mht // // History: // 06/02/2003 : [....] - Created // //--------------------------------------------------------------------------- using System; using System.ComponentModel; using System.Collections; using System.Collections.Generic; using System.Reflection; using System.Globalization; using MS.Utility; using System.Windows; namespace MS.Internal.Data { ////// IComparer class to sort by class property value (using reflection). /// internal class SortFieldComparer : IComparer { ////// Create a comparer, using the SortDescription and a Type; /// tries to find a reflection PropertyInfo for each property name /// /// list of property names and direction to sort by /// culture to use for comparisons internal SortFieldComparer(SortDescriptionCollection sortFields, CultureInfo culture) { _sortFields = sortFields; _fields = CreatePropertyInfo(_sortFields); // create the comparer _comparer = (culture == null || culture == CultureInfo.InvariantCulture) ? Comparer.DefaultInvariant : (culture == CultureInfo.CurrentCulture) ? Comparer.Default : new Comparer(culture); } ////// Compares two objects and returns a value indicating whether one is less than, equal to or greater than the other. /// /// first item to compare /// second item to compare ///; <0: o1 < o2; =0: o1 == o2; > 0: o1 > o2 ////// Compares the 2 items using the list of property names and directions. /// public int Compare(object o1, object o2) { int result = 0; // compare both objects by each of the properties until property values don't match for (int k = 0; k < _fields.Length; ++k) { object v1 = _fields[k].GetValue(o1); object v2 = _fields[k].GetValue(o2); result = _comparer.Compare(v1, v2); if (_fields[k].descending) result = -result; if (result != 0) break; } return result; } // Helper method for sorting an ArrayList. If the comparer is a SortFieldComparer, // use the cached-value approach to avoid excessive reflection. For other // comparers, sort the usual way internal static void SortHelper(ArrayList al, IComparer comparer) { SortFieldComparer sfc = comparer as SortFieldComparer; if (sfc == null) { // sort the usual way al.Sort(comparer); } else { // Sort with cached values. // Step 1. Copy the items into a list augmented with slots for // the cached values. int n = al.Count; int nFields = sfc._fields.Length; CachedValueItem[] list = new CachedValueItem[n]; for (int i=0; i
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- DataGrid.cs
- Renderer.cs
- LinqDataSourceSelectEventArgs.cs
- BaseDataListPage.cs
- UIHelper.cs
- ContextMarshalException.cs
- Canvas.cs
- LinqDataSourceStatusEventArgs.cs
- TransportElement.cs
- TimersDescriptionAttribute.cs
- HierarchicalDataTemplate.cs
- RelativeSource.cs
- WorkflowServiceHost.cs
- LoggedException.cs
- FormViewInsertEventArgs.cs
- EntityClientCacheKey.cs
- BinaryReader.cs
- GridToolTip.cs
- VisualCollection.cs
- CreateRefExpr.cs
- GrammarBuilderPhrase.cs
- DataPagerFieldCollection.cs
- AnonymousIdentificationModule.cs
- URLMembershipCondition.cs
- EmptyReadOnlyDictionaryInternal.cs
- PropertyGridEditorPart.cs
- basevalidator.cs
- XPathNodeHelper.cs
- ResourceContainer.cs
- DeflateStream.cs
- HttpApplication.cs
- HttpProcessUtility.cs
- AssemblyAssociatedContentFileAttribute.cs
- ExpressionBuilder.cs
- IgnoreFileBuildProvider.cs
- SerTrace.cs
- Translator.cs
- ControlDesigner.cs
- DeviceContext.cs
- StateRuntime.cs
- SQLDateTimeStorage.cs
- localization.cs
- RectValueSerializer.cs
- DataGridPageChangedEventArgs.cs
- InstanceLockQueryResult.cs
- EntityDataSourceQueryBuilder.cs
- TextStore.cs
- ArrayListCollectionBase.cs
- Menu.cs
- ActionFrame.cs
- ExecutionEngineException.cs
- SelectionItemProviderWrapper.cs
- MsmqPoisonMessageException.cs
- OpenTypeCommon.cs
- BitArray.cs
- HttpApplication.cs
- Shared.cs
- SemanticResolver.cs
- EnumDataContract.cs
- SymbolUsageManager.cs
- DocumentEventArgs.cs
- remotingproxy.cs
- ScriptResourceMapping.cs
- RegexBoyerMoore.cs
- OutputCacheProfile.cs
- LocatorManager.cs
- MemoryPressure.cs
- StylusPointCollection.cs
- TextBounds.cs
- HandlerFactoryCache.cs
- SecurityPolicySection.cs
- XmlBinaryReader.cs
- WebPartEditVerb.cs
- ModuleConfigurationInfo.cs
- SmtpFailedRecipientsException.cs
- DataGridViewButtonColumn.cs
- RNGCryptoServiceProvider.cs
- ObjectDataSourceDisposingEventArgs.cs
- PathFigure.cs
- TickBar.cs
- FocusWithinProperty.cs
- SessionSwitchEventArgs.cs
- IsolatedStorageSecurityState.cs
- XmlMtomReader.cs
- DbConnectionPoolGroupProviderInfo.cs
- LabelAutomationPeer.cs
- WebConfigurationHostFileChange.cs
- ComponentChangedEvent.cs
- ClientUtils.cs
- UserNamePasswordClientCredential.cs
- MetafileHeader.cs
- SetIndexBinder.cs
- RankException.cs
- RequestFactory.cs
- Sql8ExpressionRewriter.cs
- MediaElement.cs
- FusionWrap.cs
- IntPtr.cs
- ScrollChrome.cs
- InputLanguage.cs